This commit is contained in:
gongfuxiang
2025-04-25 20:21:19 +08:00
parent cbea8309ac
commit 2786d9db57
148 changed files with 2158 additions and 645 deletions

View File

@ -526,16 +526,24 @@ class Common extends BaseController
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-20T19:18:29+0800
* @param [string] $controller [控制器(默认读取当前)]
* @param [string] $action [方法(默认读取当前)]
* @param [array] $unwanted_power [不校验权限的方法(默认空)]
*/
protected function IsPower()
protected function IsPower($controller = null, $action = null, $unwanted_power = [])
{
// 不需要校验权限的方法
$unwanted_power = ['getnodeson', 'node'];
if(!AdminIsPower(null, null, $unwanted_power))
if(empty($unwanted_power))
{
$unwanted_power = ['getnodeson', 'node'];
}
if(!AdminIsPower($controller, $action, $unwanted_power))
{
$msg = MyLang('no_power_tips');
if(IS_AJAX)
{
// 结束并设置响应头
header('Content-Type: application/json; charset=utf-8');
exit(json_encode(DataReturn($msg, -1000)));
} else {
MyRedirect(MyUrl('admin/error/tips', ['msg'=>urlencode(base64_encode($msg))]), true);

View File

@ -460,6 +460,32 @@ class DiyApi extends Base
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 GoodsFavorAutoData()
{
return ApiService::ApiDataReturn(DiyApiService::GoodsFavorAutoData($this->data_request));
}
/**
* 商品浏览自动数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function GoodsBrowseAutoData()
{
return ApiService::ApiDataReturn(DiyApiService::GoodsBrowseAutoData($this->data_request));
}
/**
* 自定义初始化
* @author Devil
@ -472,5 +498,18 @@ class DiyApi extends Base
{
return ApiService::ApiDataReturn(DiyApiService::CustomInit($this->data_request));
}
/**
* 商品魔方初始化
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function GoodsMagicInit()
{
return ApiService::ApiDataReturn(DiyApiService::GoodsMagicInit($this->data_request));
}
}
?>

View File

@ -48,16 +48,14 @@ class GoodsParamsTemplate extends Base
*/
public function Detail()
{
// 模板数据
$assign = [
MyViewAssign([
// 商品参数类型
'common_goods_parameters_type_list' => MyConst('common_goods_parameters_type_list'),
// 数据
'data' => $this->data_detail,
// 参数配置
'parameters' => empty($this->data_detail['config_data']) ? [] : $this->data_detail['config_data'],
];
MyViewAssign($assign);
]);
return MyView();
}
@ -133,7 +131,6 @@ class GoodsParamsTemplate extends Base
public function Delete()
{
$params = $this->data_request;
$params['user_type'] = 'admin';
return ApiService::ApiDataReturn(GoodsParamsService::GoodsParamsTemplateDelete($params));
}

View File

@ -119,7 +119,6 @@ class GoodsSpecTemplate extends Base
public function Delete()
{
$params = $this->data_request;
$params['user_type'] = 'admin';
return ApiService::ApiDataReturn(GoodsSpecService::GoodsSpecTemplateDelete($params));
}

View File

@ -101,7 +101,7 @@ class Index extends Common
// 用户是否有数据统计权限
$is_stats = AdminIsPower('index', 'stats');
MyViewAssign('is_stats', $is_stats);
if($is_stats == 1)
if($is_stats)
{
// 默认时间
$default_day = '30-day';

View File

@ -12,6 +12,7 @@ namespace app\admin\controller;
use app\admin\controller\Base;
use app\service\ApiService;
use app\service\SystemBaseService;
use app\service\RegionService;
/**
@ -107,7 +108,7 @@ class Region extends Base
['pid', '=', $pid],
],
];
return ApiService::ApiDataReturn(DataReturn('success', 0, RegionService::RegionNode($params)));
return ApiService::ApiDataReturn(SystemBaseService::DataReturn(RegionService::RegionNode($params)));
}
/**

View File

@ -235,6 +235,7 @@ class Site extends Base
$field_list[] = 'home_site_logo_wap';
$field_list[] = 'home_site_logo_app';
$field_list[] = 'home_site_logo_square';
$field_list[] = 'home_site_title_icon';
$field_list[] = 'home_site_app_state';
break;

View File

@ -48,6 +48,22 @@ class Ueditor extends Common
*/
public function Index()
{
$action = empty($this->data_request['action']) ? 'config' : $this->data_request['action'];
switch($action)
{
// 删除操作
case 'deletefile' :
$this->IsPower('attachment', 'delete');
break;
// 验证上传权限(初始化、列表、上传、分类)
default :
// 排除配置获取
if(!in_array($action, ['config']))
{
$this->IsPower('attachment', 'upload');
}
}
return ApiService::ApiDataReturn(UeditorService::Run($this->data_request));
}
}

View File

@ -98,6 +98,7 @@ class Admin
'is_sort' => 1,
'search_config' => [
'form_type' => 'select',
'form_name' => 'status',
'where_type' => 'in',
'data' => MyConst('common_admin_status_list'),
'data_key' => 'value',

View File

@ -105,6 +105,16 @@ class GoodsBrowse
'is_point' => 1,
],
],
[
'label' => $lang['access_count'],
'view_type' => 'field',
'view_key' => 'access_count',
'is_sort' => 1,
'search_config' => [
'form_type' => 'section',
'form_name' => 'b.access_count',
],
],
[
'label' => $lang['add_time'],
'view_type' => 'field',

View File

@ -156,10 +156,6 @@ class GoodsParamsTemplate
'data' => [
'table_name' => 'GoodsParamsTemplate',
'data_handle' => 'GoodsParamsService::GoodsParamsTemplateListHandle',
'data_params' => [
'is_public' => 0,
'user_type' => 'admin',
],
],
];
}

View File

@ -157,10 +157,6 @@ class GoodsSpecTemplate
'data' => [
'table_name' => 'GoodsSpecTemplate',
'data_handle' => 'GoodsSpecService::GoodsSpecTemplateListHandle',
'data_params' => [
'is_public' => 0,
'user_type' => 'admin',
],
],
];
}

View File

@ -50,6 +50,17 @@ class Order
],
// 表单配置
'form' => [
[
'label' => $lang['system_type'],
'view_type' => 'field',
'view_key' => 'system_type',
'params_where_name' => 'system_type_value',
'is_copy' => 1,
'width' => 130,
'search_config' => [
'form_type' => 'input',
],
],
[
'label' => $lang['goods'],
'view_type' => 'module',

View File

@ -75,6 +75,18 @@ class PayLog
],
// 表单配置
'form' => [
[
'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['user'],
'view_type' => 'module',

View File

@ -512,6 +512,8 @@ return [
'nav_store_theme_name' => '更多主題下載',
'nav_theme_download_name' => '查看小程式打包教程',
'nav_theme_download_tips' => '手機端主題採用uniapp開發支持多端小程式、H5、APP',
'nav_appmini_order_list_path_name' => '訂單清單path',
'nav_appmini_order_detail_path_name' => '訂單詳情path',
'form_alipay_extend_title' => '客服配寘',
'form_alipay_extend_tips' => 'PS如【APP/小程式】中開啟(開啟線上客服),則以下配寘必填[企業編碼]和[聊天窗編碼]',
'form_theme_upload_tips' => '上傳一個zip壓縮格式的安裝包',
@ -674,6 +676,7 @@ return [
'goods_placeholder' => '請輸入商品名稱/簡述/SEO資訊',
'price' => '銷售價格',
'original_price' => '原價',
'access_count' => '流覽量',
'add_time' => '創建時間',
],
],
@ -804,6 +807,7 @@ return [
'detail_no_payment_tips' => '請注意、該訂單還未支付',
// 动态表格
'form_table' => [
'system_type' => '系統類型',
'goods' => '基礎資訊',
'goods_placeholder' => '請輸入訂單ID/訂單號/商品名稱/型號',
'user' => '用戶資訊',
@ -1026,6 +1030,7 @@ return [
'pay_request_title' => '支付請求日誌',
// 动态表格
'form_table' => [
'id' => '數據ID',
'user' => '用戶資訊',
'user_placeholder' => '請輸入用戶名/昵稱/手機/郵箱',
'log_no' => '支付單號',
@ -1229,6 +1234,7 @@ return [
'diy' => [
'nav_store_diy_name' => '更多diy範本下載',
'nav_apptabbar_name' => '底部選單',
'nav_homediy_name' => '首頁DIY',
'upload_list_tips' => [
'1. 選擇已下載的diy設計zip包',
'2. 導入將自動新增一條數據',
@ -1603,6 +1609,7 @@ return [
'attachmentcategory_index' => '附件分類',
'attachmentcategory_save' => '附件分類添加/編輯',
'attachmentcategory_statusupdate' => '附件狀態更新',
'attachmentcategory_upload' => '附件上傳',
'attachmentcategory_delete' => '附件分類删除',
]
],

View File

@ -516,6 +516,8 @@ return [
'nav_store_theme_name' => 'More topic downloads',
'nav_theme_download_name' => 'View the applet packaging tutorial',
'nav_theme_download_tips' => 'The mobile theme is developed using Uniapp (supporting multiple mini programs, H5, and APP)',
'nav_appmini_order_list_path_name' => 'Order list path',
'nav_appmini_order_detail_path_name' => 'Order details path',
'form_alipay_extend_title' => 'Customer service configuration',
'form_alipay_extend_tips' => 'PS: If [APP/applet] is enabled (online customer service is enabled), the following configuration must be filled in [Enterprise Code] and [Chat Window Code]',
'form_theme_upload_tips' => 'Upload a zip compressed installation package',
@ -678,6 +680,7 @@ return [
'goods_placeholder' => 'Please enter the goods name/brief description/SEO information',
'price' => 'Sales Price(yuan)',
'original_price' => 'Original Price(yuan))',
'access_count' => 'Access count',
'add_time' => 'Creation Time',
],
],
@ -822,6 +825,7 @@ return [
'detail_no_payment_tips' => 'Please note that the order has not been paid',
// 动态表格
'form_table' => [
'system_type' => 'System type',
'goods' => 'Base Info',
'goods_placeholder' => 'Please enter order ID/order number/goods name/model',
'user' => 'User Info',
@ -1044,6 +1048,7 @@ return [
'pay_request_title' => 'Payment Request Log',
// 动态表格
'form_table' => [
'id' => 'Data ID',
'user' => 'User Info',
'user_placeholder' => 'Please enter user name/nickname/mobile phone/email',
'log_no' => 'Payment OrderNo',
@ -1247,6 +1252,7 @@ return [
'diy' => [
'nav_store_diy_name' => 'More DIY template downloads',
'nav_apptabbar_name' => 'Bottom menu',
'nav_homediy_name' => 'Home DIY',
'upload_list_tips' => [
'1. Select the downloaded DIY design zip file',
'2. Importing will automatically add a new piece of data',
@ -1621,6 +1627,7 @@ return [
'attachmentcategory_index' => 'Annex category',
'attachmentcategory_save' => 'Annex category add/edit',
'attachmentcategory_statusupdate' => 'Annex status update',
'attachmentcategory_upload' => 'Annex upload',
'attachmentcategory_delete' => 'Annex category deletion',
]
],

View File

@ -512,6 +512,8 @@ return [
'nav_store_theme_name' => 'Descarga de más temas',
'nav_theme_download_name' => 'Ver el tutorial de embalaje de applets',
'nav_theme_download_tips' => 'El tema del teléfono móvil se desarrolla con una aplicación uniapp (admite applets multiterminales, h5, app)',
'nav_appmini_order_list_path_name' => 'Ruta de la lista de pedidos',
'nav_appmini_order_detail_path_name' => 'Detalles del pedido ruta',
'form_alipay_extend_title' => 'Configuración del servicio al cliente',
'form_alipay_extend_tips' => 'Ps: si se abre en [app / applet] (se abre el servicio al cliente en línea), se deben rellenar las siguientes configuraciones [código corporativo] y [código de ventana de chat]',
'form_theme_upload_tips' => 'Cargar un paquete de instalación en formato zip comprimido',
@ -674,6 +676,7 @@ return [
'goods_placeholder' => 'Introduzca el nombre del producto / breve descripción / información seo',
'price' => 'Precio de venta (yuan)',
'original_price' => 'Precio original (yuan)',
'access_count' => 'Vistas',
'add_time' => 'Tiempo de creación',
],
],
@ -804,6 +807,7 @@ return [
'detail_no_payment_tips' => 'Tenga en cuenta que el pedido aún no se ha pagado',
// 动态表格
'form_table' => [
'system_type' => 'Tipo de sistema',
'goods' => 'Información básica',
'goods_placeholder' => 'Introduzca el id del pedido / número de pedido / nombre del producto / Modelo',
'user' => 'Información del usuario',
@ -1026,6 +1030,7 @@ return [
'pay_request_title' => 'Registro de solicitudes de pago',
// 动态表格
'form_table' => [
'id' => 'ID de datos',
'user' => 'Información del usuario',
'user_placeholder' => 'Introduzca su nombre de usuario / apodo / teléfono móvil / buzón',
'log_no' => 'Número de orden de pago',
@ -1229,6 +1234,7 @@ return [
'diy' => [
'nav_store_diy_name' => 'Más descargas de plantillas DIY',
'nav_apptabbar_name' => 'Menú inferior',
'nav_homediy_name' => 'Página de inicio DIY',
'upload_list_tips' => [
'1. Elija el paquete zip de diseño DIY descargado',
'2. La importación agregará automáticamente un nuevo dato',
@ -1603,6 +1609,7 @@ return [
'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_upload' => 'Carga de archivos adjuntos',
'attachmentcategory_delete' => 'Eliminación de la clasificación de Anexos',
]
],

View File

@ -513,6 +513,8 @@ return [
'nav_store_theme_name' => '更多主题下载',
'nav_theme_download_name' => '查看小程序打包教程',
'nav_theme_download_tips' => '手机端主题采用uniapp开发支持多端小程序、H5、APP',
'nav_appmini_order_list_path_name' => '订单列表path',
'nav_appmini_order_detail_path_name' => '订单详情path',
'form_alipay_extend_title' => '客服配置',
'form_alipay_extend_tips' => 'PS如【APP/小程序】中开启(开启在线客服),则以下配置必填 [企业编码] 和 [聊天窗编码]',
'form_theme_upload_tips' => '上传一个zip压缩格式的安装包',
@ -675,6 +677,7 @@ return [
'goods_placeholder' => '请输入商品名称/简述/SEO信息',
'price' => '销售价格',
'original_price' => '原价',
'access_count' => '浏览量',
'add_time' => '创建时间',
],
],
@ -805,6 +808,7 @@ return [
'detail_no_payment_tips' => '请注意、该订单还未支付',
// 动态表格
'form_table' => [
'system_type' => '系统类型',
'goods' => '基础信息',
'goods_placeholder' => '请输入订单ID/订单号/商品名称/型号',
'user' => '用户信息',
@ -1027,6 +1031,7 @@ return [
'pay_request_title' => '支付请求日志',
// 动态表格
'form_table' => [
'id' => '数据ID',
'user' => '用户信息',
'user_placeholder' => '请输入用户名/昵称/手机/邮箱',
'log_no' => '支付单号',
@ -1230,6 +1235,7 @@ return [
'diy' => [
'nav_store_diy_name' => '更多diy模板下载',
'nav_apptabbar_name' => '底部菜单',
'nav_homediy_name' => '首页DIY',
'upload_list_tips' => [
'1. 选择已下载的diy设计zip包',
'2. 导入将自动新增一条数据',
@ -1624,6 +1630,7 @@ return [
'attachmentcategory_index' => '附件分类',
'attachmentcategory_save' => '附件分类添加/编辑',
'attachmentcategory_statusupdate' => '附件状态更新',
'attachmentcategory_upload' => '附件上传',
'attachmentcategory_delete' => '附件分类删除',
]
],

View File

@ -138,14 +138,17 @@
</div>
<div class="am-modal-bd">
<div class="base am-form-group input-compose">
<input type="text" placeholder="{{:MyLang('form_images_verify_title')}}" minlength="4" maxlength="4" id="verify-img-value" data-validation-message="{{:MyLang('form_images_verify_message')}}" class="am-form-field am-radius" />
<input type="text" placeholder="{{:MyLang('form_images_verify_title')}}" minlength="4" maxlength="4" id="verify-img-value" data-is-clearout="0" data-validation-message="{{:MyLang('form_images_verify_message')}}" class="am-form-field am-radius" />
<div class="am-input-group-btn verify-img">
<img src="" class="am-radius am-cursor-pointer" id="verify-img" onClick="this.src='{{:MyUrl('admin/admin/adminverifyentry')}}&'+Math.random();" />
<a href="javascript:;" class="verify-tips" onClick="document.getElementById('verify-img').src='{{:MyUrl('admin/admin/adminverifyentry')}}&'+Math.random();">{{:MyLang('form_images_verify_button_text')}}</a>
</div>
</div>
<div>
<button type="button" class="am-btn am-btn-primary am-radius am-btn-xs block m-t-20 btn-loading-example verify-submit-win" data-am-loading="{spinner:'circle-o-notch', loadingText:'{{:MyLang('send_tips')}}'}" data-win="1">{{:MyLang('confirm_title')}}</button>
<button type="button" class="am-btn am-btn-primary am-radius am-btn-xs block m-t-20 btn-loading-example verify-submit-win" data-am-loading="{spinner:'circle-o-notch', loadingText:'{{:MyLang('confirm_title')}}'}" data-win="1">
<i class="am-icon-check"></i>
<span>{{:MyLang('confirm_title')}}</span>
</button>
</div>
</div>
</div>

View File

@ -142,36 +142,7 @@
<!-- 首页DIY模板 -->
<div class="item" data-key="home-diy-template">
<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"></i>
</div>
<p>{{:MyLang('appconfig.home_diy_template_tips')}}</p>
</div>
<div class="home-diy-template-list am-margin-bottom-lg">
{{foreach $common_platform_type as $v}}
{{if !in_array($v['value'], ['pc'])}}
<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_app_home_data_diy_mode[{{$v.value}}][diy_id]" 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($diy_list)}}
{{foreach $diy_list as $diy}}
<option value="{{$diy.id}}" {{if !empty($data['common_app_home_data_diy_mode']) and !empty($data['common_app_home_data_diy_mode']['value']) and !empty($data['common_app_home_data_diy_mode']['value'][$v['value']]) and !empty($data['common_app_home_data_diy_mode']['value']) and !empty($data['common_app_home_data_diy_mode']['value'][$v['value']]['diy_id']) and $data['common_app_home_data_diy_mode']['value'][$v['value']]['diy_id'] eq $diy['id']}}selected{{/if}}>{{$diy.name}}</option>
{{/foreach}}
{{/if}}
</select>
<div class="form-multiple-where-input am-margin-left-sm">
<input type="text" autocomplete="off" name="common_app_home_data_diy_mode[{{$v.value}}][time_start]" class="Wdate am-radius" placeholder="{{:MyLang('form_time_start_title')}}" onclick="WdatePicker({firstDayOfWeek:1,dateFmt:'yyyy-MM-dd HH:mm:ss'})" value="{{if !empty($data['common_app_home_data_diy_mode']) and !empty($data['common_app_home_data_diy_mode']['value']) and !empty($data['common_app_home_data_diy_mode']['value'][$v['value']]) and !empty($data['common_app_home_data_diy_mode']['value']) and !empty($data['common_app_home_data_diy_mode']['value'][$v['value']]['time_start'])}}{{$data['common_app_home_data_diy_mode']['value'][$v['value']]['time_start']}}{{/if}}" />
<span class="am-text-grey">~</span>
<input type="text" autocomplete="off" class="Wdate am-radius" placeholder="{{:MyLang('form_time_end_title')}}" name="common_app_home_data_diy_mode[{{$v.value}}][time_end]" onclick="WdatePicker({firstDayOfWeek:1,dateFmt:'yyyy-MM-dd HH:mm:ss'})" value="{{if !empty($data['common_app_home_data_diy_mode']) and !empty($data['common_app_home_data_diy_mode']['value']) and !empty($data['common_app_home_data_diy_mode']['value'][$v['value']]) and !empty($data['common_app_home_data_diy_mode']['value']) and !empty($data['common_app_home_data_diy_mode']['value'][$v['value']]['time_end'])}}{{$data['common_app_home_data_diy_mode']['value'][$v['value']]['time_end']}}{{/if}}" />
</div>
</div>
{{/if}}
{{/foreach}}
</div>
{{:ModuleInclude('appconfig/public/home-diy-template')}}
</div>
<!-- 在线客服 -->

View File

@ -0,0 +1,24 @@
{{: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/appconfig/save', ['nav_type'=>$nav_type])}}" method="POST" request-type="ajax-close" request-value="parent">
{{:ModuleInclude('appconfig/public/home-diy-template')}}
<div class="am-form-popup-submit am-text-left">
<input type="hidden" name="type" value="{{$nav_type}}" />
<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>
<!-- right content end -->
<!-- footer start -->
{{:ModuleInclude('public/footer')}}
<!-- footer end -->

View File

@ -0,0 +1,30 @@
<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"></i>
</div>
<p>{{:MyLang('appconfig.home_diy_template_tips')}}</p>
</div>
<div class="home-diy-template-list am-margin-bottom-lg">
{{foreach $common_platform_type as $v}}
{{if !in_array($v['value'], ['pc'])}}
<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_app_home_data_diy_mode[{{$v.value}}][diy_id]" 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($diy_list)}}
{{foreach $diy_list as $diy}}
<option value="{{$diy.id}}" {{if !empty($data['common_app_home_data_diy_mode']) and !empty($data['common_app_home_data_diy_mode']['value']) and !empty($data['common_app_home_data_diy_mode']['value'][$v['value']]) and !empty($data['common_app_home_data_diy_mode']['value']) and !empty($data['common_app_home_data_diy_mode']['value'][$v['value']]['diy_id']) and $data['common_app_home_data_diy_mode']['value'][$v['value']]['diy_id'] eq $diy['id']}}selected{{/if}}>{{$diy.name}}</option>
{{/foreach}}
{{/if}}
</select>
<div class="form-multiple-where-input am-margin-left-sm">
<input type="text" autocomplete="off" name="common_app_home_data_diy_mode[{{$v.value}}][time_start]" class="Wdate am-radius" placeholder="{{:MyLang('form_time_start_title')}}" onclick="WdatePicker({firstDayOfWeek:1,dateFmt:'yyyy-MM-dd HH:mm:ss'})" value="{{if !empty($data['common_app_home_data_diy_mode']) and !empty($data['common_app_home_data_diy_mode']['value']) and !empty($data['common_app_home_data_diy_mode']['value'][$v['value']]) and !empty($data['common_app_home_data_diy_mode']['value']) and !empty($data['common_app_home_data_diy_mode']['value'][$v['value']]['time_start'])}}{{$data['common_app_home_data_diy_mode']['value'][$v['value']]['time_start']}}{{/if}}" />
<span class="am-text-grey">~</span>
<input type="text" autocomplete="off" class="Wdate am-radius" placeholder="{{:MyLang('form_time_end_title')}}" name="common_app_home_data_diy_mode[{{$v.value}}][time_end]" onclick="WdatePicker({firstDayOfWeek:1,dateFmt:'yyyy-MM-dd HH:mm:ss'})" value="{{if !empty($data['common_app_home_data_diy_mode']) and !empty($data['common_app_home_data_diy_mode']['value']) and !empty($data['common_app_home_data_diy_mode']['value'][$v['value']]) and !empty($data['common_app_home_data_diy_mode']['value']) and !empty($data['common_app_home_data_diy_mode']['value'][$v['value']]['time_end'])}}{{$data['common_app_home_data_diy_mode']['value'][$v['value']]['time_end']}}{{/if}}" />
</div>
</div>
{{/if}}
{{/foreach}}
</div>

View File

@ -4,6 +4,11 @@
<div class="content-right">
<!-- second nav end -->
<div class="content">
<!-- 提示 -->
<!-- 新版本小程序主题提示 -->
<div class="am-operate-stretch-tips">
<div class="title">
@ -18,8 +23,18 @@
<span>{{:MyLang('appmini.nav_store_theme_name')}}</span>
</a>
<p class="am-margin-top-xs">
<a href="https://uniapp.shopxo.net/" target="_blank">{{:MyLang('appmini.nav_theme_download_name')}} <i class="am-icon-external-link"></i></a>
<a href="https://uniapp.shopxo.net/" target="_blank">{{:MyLang('appmini.nav_theme_download_name')}} >></a>
</p>
<div class="am-margin-top">
<span>{{:MyLang('appmini.nav_appmini_order_list_path_name')}}:</span>
<strong class="am-color-blue">pages/paylog-list/paylog-list</strong>
<span class="am-badge am-badge-success am-round am-margin-left-xs am-icon-copy text-copy-submit" data-value="pages/paylog-list/paylog-list"> {{:MyLang('copy_title')}}</span>
</div>
<div class="am-margin-top-xs">
<span>{{:MyLang('appmini.nav_appmini_order_detail_path_name')}}:</span>
<strong class="am-color-blue">pages/paylog-detail/paylog-detail?orderno=${商品订单号}</strong>
<span class="am-badge am-badge-success am-round am-margin-left-xs am-icon-copy text-copy-submit" data-value="pages/paylog-detail/paylog-detail?orderno=${商品订单号}"> {{:MyLang('copy_title')}}</span>
</div>
</div>
</div>

View File

@ -20,10 +20,17 @@
<!-- 底部菜单 -->
{{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>
<i class="iconfont icon-order-list am-show-sm-only"></i>
<span>{{:MyLang('diy.nav_apptabbar_name')}}</span>
</button>
{{/if}}
<!-- 首页DIY -->
{{if AdminIsPower('appconfig', 'index')}}
<button type="button" class="am-btn am-btn-default-plain am-radius am-btn-xs submit-popup" data-offcanvas="right" data-url="{{:MyUrl('admin/appconfig/index', ['type'=>'homediy'])}}" data-title="{{:MyLang('diy.nav_homediy_name')}}">
<i class="iconfont icon-tupianmofang am-show-sm-only"></i>
<span>{{:MyLang('diy.nav_homediy_name')}}</span>
</button>
{{/if}}
<!-- 父级内容 -->
{__block__}
{{if $is_system_show_base eq 1 and AdminIsPower('packageinstall', 'index') and !empty($store_diy_url)}}

View File

@ -15,7 +15,7 @@
<div class="am-margin-bottom-sm am-text-center">
<span class="am-color-grey">{{$v.name}}</span>
{{if !empty($v['url'])}}
<span class="text-copy-submit am-color-blue am-margin-left-sm" data-value="{{$v.url}}">{{:MyLang('copy_title')}}</span>
<span class="text-copy-submit am-color-blue am-margin-left-xs" data-value="{{$v.url}}">{{:MyLang('copy_title')}}</span>
{{/if}}
</div>
{{/foreach}}

View File

@ -41,7 +41,7 @@
<td class="am-text-middle">
<div class="am-flex am-flex-items-center am-gap-1">
<input type="text" value="{{$spec_base.title}}" name="spec_base_title_{{$spec_base_key}}" placeholder="{{:MyLang('common_service.goods.form_spec_type_title')}}" class="am-radius" />
<i class="am-close quick-title-remove iconfont icon-delete am-text-red"></i>
<i class="am-close quick-title-remove iconfont icon-delete am-text-primary"></i>
</div>
</td>
<td class="spec-quick-td-value am-cf">
@ -51,7 +51,7 @@
<div class="am-fl value-item">
<div class="am-flex am-flex-items-center am-gap-1">
<input type="text" class="am-fl am-radius" name="spec_base_value_{{$spec_base_key}}[]" value="{{$value}}" placeholder="{{:MyLang('common_service.goods.form_spec_value_title')}}" />
<i class="am-close quick-value-remove iconfont icon-delete am-text-red"></i>
<i class="am-close quick-value-remove iconfont icon-delete am-text-primary"></i>
</div>
</div>
{{/foreach}}
@ -82,7 +82,7 @@
</span>
<span class="am-text-warning am-margin-left-sm"></span>
</div>
<div class="goods-specifications am-padding-top-sm">
<div class="goods-specifications">
<!-- 规格列表 -->
<div class="specifications-container am-scrollable-horizontal">
<table class="am-table am-table-bordered am-table-centered specifications-table am-margin-bottom-sm am-table-striped am-table-hover table-thead-beautify am-margin-bottom-0"
@ -114,7 +114,7 @@
<th class="table-title table-title-{{$type_v.id}}">
<div class="am-flex am-am-flex-items-center am-gap-1">
<input type="text" name="specifications_name_{{$type_v.id}}" placeholder="{{:MyLang('common_service.goods.form_spec_type_title')}}" value="{{$type_v.name}}" data-validation-message="{{:MyLang('common_service.goods.form_spec_type_message')}}" class="am-radius" data-is-clearout="0" required />
<i class="am-close title-nav-remove iconfont icon-delete am-text-red" data-index="{{$type_v.id}}"></i>
<i class="am-close title-nav-remove iconfont icon-delete am-text-primary" data-index="{{$type_v.id}}"></i>
</div>
</th>
{{/foreach}}

View File

@ -111,7 +111,7 @@
<!-- 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("icon_title")}}","field":"icon","type":"img"},{"name":"{{:MyLang("form_is_enable_title")}}","field":"is_enable","type":"status"},{"name":"{{:MyLang("operate_title")}}","type":"operate"}]' data-additional='[{"field":"is_home_recommended", "value":"0", "type":"input"},{"field":"bg_color", "value":"", "type":"input"}, {"field":"bg_color", "value":"", "type":"css", "tag":".colorpicker-submit", "style":"background-color"}, {"field":"icon", "value":"", "type":"input"}, {"field":"icon", "value":"", "type":"annex", "tag":"ul.goods-category-icon-images-view", "style":"src"}, {"field":"icon_active", "value":"", "type":"input"}, {"field":"icon_active", "value":"", "type":"annex", "tag":"ul.goods-category-icon-active-images-view", "style":"src"}, {"field":"realistic_images", "value":"", "type":"input"}, {"field":"realistic_images", "value":"", "type":"annex", "tag":"ul.goods-category-realistic_images-images-view", "style":"src"}, {"field":"big_images", "value":"", "type":"input"}, {"field":"big_images", "value":"", "type":"annex", "tag":"ul.goods-category-big_images-images-view", "style":"src"}]' data-node-url="{{:MyUrl('admin/goodscategory/getnodeson')}}" data-del-url="{{:MyUrl('admin/goodscategory/delete')}}" data-popup-tag="#data-save-win" data-status-url="{{:MyUrl('admin/goodscategory/statusupdate')}}" data-rank="3">
<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("icon_title")}}","field":"icon","type":"img"},{"name":"{{:MyLang("form_is_enable_title")}}","field":"is_enable","type":"status"},{"name":"{{:MyLang("operate_title")}}","type":"operate"}]' data-additional='[{"field":"is_home_recommended", "value":"0", "type":"input"},{"field":"bg_color", "value":"", "type":"input"}, {"field":"bg_color", "value":"", "type":"css", "tag":".colorpicker-submit", "style":"background-color"}, {"field":"icon", "value":"", "type":"input"}, {"field":"icon", "value":"", "type":"annex", "tag":"ul.goods-category-icon-images-view", "style":"src"}, {"field":"icon_active", "value":"", "type":"input"}, {"field":"icon_active", "value":"", "type":"annex", "tag":"ul.goods-category-icon-active-images-view", "style":"src"}, {"field":"realistic_images", "value":"", "type":"input"}, {"field":"realistic_images", "value":"", "type":"annex", "tag":"ul.goods-category-realistic_images-images-view", "style":"src"}, {"field":"big_images", "value":"", "type":"input"}, {"field":"big_images", "value":"", "type":"annex", "tag":"ul.goods-category-big_images-images-view", "style":"src"}]' data-node-url="{{:MyUrl('admin/goodscategory/getnodeson')}}" data-del-url="{{:MyUrl('admin/goodscategory/delete')}}" data-status-url="{{:MyUrl('admin/goodscategory/statusupdate')}}" data-popup-tag="#data-save-win" data-rank="3">
{{:ModuleInclude('public/loading')}}
</div>
<!-- list end -->

View File

@ -11,7 +11,7 @@
],
[
'name' => MyLang('goodsparamstemplate.detail_params_title'),
'key' => 'goodsparamstemplate-detail_params_title',
'key' => 'config',
]
]
])}}
@ -22,7 +22,7 @@
</div>
<!-- 商品参数 -->
<div class="item" data-key="goodsparamstemplate-detail_params_title">
<div class="item" data-key="config">
{{:ModuleInclude('public/goodsparamstemplate/detail')}}
</div>
</div>

View File

@ -27,7 +27,7 @@
</div>
{{:ModuleInclude('lib/is_enable', ['is_row'=>1])}}
<div class="am-form-group row">
<div class="am-form-group row am-padding-bottom-0">
<label class="am-block">
{{:MyLang('common_service.goodsparamstemplate.form_item_config_title')}}
<span class="am-form-group-label-tips-must">*</span>

View File

@ -1,7 +1,7 @@
{{:ModuleInclude('public/header')}}
<!-- right content start -->
<div class="content-right" data-url="{{:MyUrl('admin/index/stats')}}">
<div class="content-right" data-url="{{:MyUrl('admin/index/stats')}}" data-is-stats="{{if isset($is_stats) and $is_stats eq true}}1{{else /}}0{{/if}}">
<div class="content bg-transparent am-padding-0">
<!-- 顶部钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}}
@ -80,7 +80,7 @@
{{/if}}
<!-- 是否展示统计数据 -->
{{if isset($is_stats) and $is_stats eq 1}}
{{if isset($is_stats) and $is_stats eq true}}
<!-- 基础统计内部顶部钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}}
<div class="plugins-tag">
@ -113,8 +113,8 @@
{{/if}}
{{/if}}
{{/foreach}}
<div id="shopxo-base-dropdown" class="dropdown-more">
<div class="am-dropdown" data-am-dropdown="{justify: '#shopxo-base-dropdown'}">
<div id="base-dropdown" class="dropdown-more">
<div class="am-dropdown" data-am-dropdown="{justify: '#base-dropdown'}">
<a href="javascript:;" class="am-dropdown-toggle more-btn">{{:MyLang('more_title')}} <i class="iconfont icon-angle-down"></i></a>
<div class="am-dropdown-content am-radius-lg">
<div class="am-flex am-flex-warp am-gap-1">

View File

@ -30,7 +30,7 @@
<div class="am-form-popup-submit">
<input type="hidden" name="id" value="{{$data.id}}"/>
<input type="hidden" name="user_id" value="{{$data.user_id}}"/>
<button type="button" class="am-btn am-btn-warning am-radius am-btn-xs am-margin-right-lg" data-am-modal-close>
<button type="button" class="am-btn am-btn-warning am-radius am-btn-xs" data-am-modal-close>
<i class="am-icon-paint-brush"></i>
<span>{{:MyLang('cancel_title')}}</span>
</button>

View File

@ -22,7 +22,7 @@
<div class="am-form-popup-submit">
<input type="hidden" name="id" value="0" />
<input type="hidden" name="user_id" value="0" />
<button type="button" class="am-btn am-btn-warning am-radius am-btn-xs am-margin-right-lg" data-am-modal-close>
<button type="button" class="am-btn am-btn-warning am-radius am-btn-xs" data-am-modal-close>
<i class="am-icon-paint-brush"></i>
<span>{{:MyLang('cancel_title')}}</span>
</button>
@ -76,7 +76,7 @@
<div class="am-form-popup-submit">
<input type="hidden" name="id" value="0" />
<input type="hidden" name="payment_id" value="0" />
<button type="button" class="am-btn am-btn-warning am-radius am-btn-xs am-margin-right-lg" data-am-modal-close>
<button type="button" class="am-btn am-btn-warning am-radius am-btn-xs" data-am-modal-close>
<i class="am-icon-paint-brush"></i>
<span>{{:MyLang('cancel_title')}}</span>
</button>

View File

@ -30,7 +30,7 @@
<div class="am-form-popup-submit">
<input type="hidden" name="id" value="{{$data.id}}"/>
<input type="hidden" name="user_id" value="{{$data.user_id}}"/>
<button type="button" class="am-btn am-btn-warning am-radius am-btn-xs am-margin-right-lg" data-am-modal-close>
<button type="button" class="am-btn am-btn-warning am-radius am-btn-xs" data-am-modal-close>
<i class="am-icon-paint-brush"></i>
<span>{{:MyLang('cancel_title')}}</span>
</button>

View File

@ -6,12 +6,12 @@
<div class="am-nbfc">
{{if !empty($v['business_id'])}}
<span class="am-icon-circle-thin">
<strong>{{$v.business_id}}</strong>
<strong class="text-copy-submit">{{$v.business_id}}</strong>
</span>
{{/if}}
{{if !empty($v['business_no'])}}
<span class="am-icon-bookmark-o am-margin-left">
<strong>{{$v.business_no}}</strong>
<strong class="text-copy-submit">{{$v.business_no}}</strong>
</span>
{{/if}}
</div>

View File

@ -304,24 +304,33 @@
</div>
{{/if}}
{{if $is_system_show_base eq 1}}
<div class="am-padding-vertical-xl am-text-center">
<a href="{{$store_url}}" target="_blank" class="am-margin-left-xs">{{:MyLang('pluginsadmin.more_plugins_store_to_text')}}</a>
{{if AdminIsPower('pluginsadmin', 'upload')}}
<div class="am-text-center">
<a href="javascript:;" class="submit-popup" data-url="{{:MyUrl('admin/pluginsadmin/index', ['view_type'=>'upload', 'switch_active'=>'market'])}}" data-title="{{:MyLang('pluginsadmin.base_upload_application_name')}}" data-full-max="1" data-full-max-size="xl">{{:MyLang('pluginsadmin.more_plugins_store_to_text')}}</a>
</div>
{{else /}}
{{if $is_system_show_base eq 1}}
<div class="am-padding-vertical-xl am-text-center">
<a href="{{$store_url}}" target="_blank" class="am-margin-left-xs">{{:MyLang('pluginsadmin.more_plugins_store_to_text')}}</a>
</div>
{{/if}}
{{/if}}
{{else /}}
{{if $is_not_bind_accounts eq 1}}
{{:ModuleInclude('public/store_bind_accounts_tips')}}
{{else /}}
<div class="table-no">
<i class="am-icon-skyatlas am-icon-lg"></i>
<p class="am-margin-top-sm">{{:MyLang('plugins_no_data_tips')}}</p>
{{:ModuleInclude('public/not_data', ['msg'=>MyLang('plugins_no_data_tips')])}}
{{if AdminIsPower('pluginsadmin', 'upload')}}
<div class="am-text-center">
<a href="javascript:;" class="submit-popup" data-url="{{:MyUrl('admin/pluginsadmin/index', ['view_type'=>'upload', 'switch_active'=>'market'])}}" data-title="{{:MyLang('pluginsadmin.base_upload_application_name')}}" data-full-max="1" data-full-max-size="xl">{{:MyLang('pluginsadmin.no_data_store_to_text')}}</a>
</div>
{{else /}}
{{if $is_system_show_base eq 1}}
<div class="am-margin-top-xl">
<a href="{{$store_url}}" target="_blank" class="am-margin-left-xs">{{:MyLang('pluginsadmin.no_data_store_to_text')}}</a>
</div>
{{/if}}
</div>
{{/if}}
{{/if}}
{{/if}}
</div>

View File

@ -13,11 +13,12 @@
'name' => MyLang('plugins_market_title'),
'key' => 'market',
],
]
],
'index' => (isset($params['switch_active']) && $params['switch_active'] == 'market') ? 1 : 0,
])}}
<div class="detail-content-switch-data-item">
<!-- 本地导入 -->
<div class="item am-ht-auto am-active" data-key="upload">
<div class="item am-ht-auto {{if !isset($params['switch_active']) or $params['switch_active'] eq 'upload'}}am-active{{/if}}" 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">
@ -40,7 +41,7 @@
</form>
</div>
<!-- 模板市场 -->
<div class="item am-ht-auto" data-key="market">
<div class="item am-ht-auto {{if isset($params['switch_active']) and $params['switch_active'] eq 'market'}}am-active{{/if}}" data-key="market">
{{:ModuleInclude('public/market/index', [
'type' => 'plugins',
'back_win_refresh_type' => 'none',

View File

@ -135,6 +135,7 @@
var __my_http__ = '{{$my_http}}';
var __my_host__ = '{{$my_host}}';
var __my_url__ = '{{$my_url}}';
var __my_view_url__ = '{{$my_view_url}}';
var __my_public_url__ = '{{$my_public_url}}';
var __public__ = '{{$public_host}}';
var __default_theme__ = '{{$default_theme}}';

View File

@ -107,8 +107,7 @@
<li>
<a href="javascript:;" class="menu-items-{{$vss.key}} menu-item" data-parent-id="{{$vs.id}}" data-parent="{{$v.id}}|{{$vs.id}}"
data-type="menu" data-url="{{$vss.url}}" data-key="{{$vss.id}}">
<p class="nav-name am-inline-block am-text-break am-text-truncate">{{$vss.name}}
</p>
<p class="nav-name am-inline-block am-text-break am-text-truncate">{{$vss.name}}</p>
</a>
</li>
{{/foreach}}

View File

@ -87,14 +87,14 @@
</li>
<!-- 后台公告 -->
{{if !empty($base_config['seller_center_notice']) and is_array($base_config['seller_center_notice'])}}
{{if !empty($admin_notice)}}
<li class="am-dropdown" data-am-dropdown="{trigger: 'hover'}">
<a class="am-dropdown-toggle am-flex am-flex-row am-flex-items-center am-gap-12" href="javascript:;">
<a href="javascript:;" class="am-dropdown-toggle am-flex am-flex-row am-flex-items-center am-gap-12">
<i class="iconfont icon-notice"></i>
<span class="am-show-sm-only">{{:MyLang('notice_title')}}</span>
</a>
<div class="am-dropdown-content am-radius-lg am-color-333 notice-width">
<p>{{:implode("<br />", $base_config['seller_center_notice'])}}</p>
<p>{{$admin_notice|raw}}</p>
</div>
</li>
{{/if}}

View File

@ -32,18 +32,18 @@
<div class="nav-content">
<div class="item am-active" data-key="role-form-item-menu">
<div class="am-form-group">
<ul class="tree-list am-avg-sm-1 am-avg-md-1 am-avg-lg-1 am-nbfc am-radius-lg">
<ul class="tree-list am-nbfc am-radius-lg" data-is-two-check-find="0" data-is-three-check-parent="0">
{{if !empty($power['power'])}}
{{foreach $power.power as $v}}
<li>
<div class="item-content am-padding-sm">
<label class="am-checkbox-inline">
<input type="checkbox" name="power_id" value="{{$v.id}}" class="node-choice" {{if $v['is_power'] eq 'ok'}}checked{{/if}} data-am-ucheck />
<input type="checkbox" name="power_id" value="{{$v.id}}" {{if $v['is_power'] eq 'ok'}}checked{{/if}} data-am-ucheck />
<span class="{{if $v['is_show'] eq 0}}am-color-999{{/if}}">{{$v.name}}</span>
</label>
</div>
{{if !empty($v['item'])}}
<ul class="list-find am-avg-sm-1 am-avg-md-1 am-avg-lg-1">
<ul class="list-find">
{{foreach $v.item as $vs}}
<li class="am-flex am-flex-row am-flex-justify-between am-flex-items-center am-flex-warp">
<div class="item-content am-padding-sm">
@ -53,7 +53,7 @@
</label>
</div>
{{if !empty($vs['item'])}}
<div class="am-padding-sm am-flex am-flex-justify-right am-flex-grow am-flex-items-center am-flex-warp am-gap-1">
<div class="list-find-three am-padding-sm am-flex am-flex-justify-right am-flex-grow am-flex-items-center am-flex-warp am-gap-1">
{{foreach $vs.item as $vss}}
<label class="am-checkbox-inline">
<input type="checkbox" name="power_id" value="{{$vss.id}}" {{if $vss['is_power'] eq 'ok'}}checked{{/if}} data-am-ucheck>
@ -79,10 +79,10 @@
<div class="am-form-group">
<div class="tree-plugins am-padding-left-sm am-checkbox-group am-flex am-flex-warp-re am-flex-items-center am-gap-12">
<label class="am-checkbox-inline am-text-truncate">
<input type="checkbox" name="plugins" value="" class="auth-choice" data-am-ucheck />
<input type="checkbox" name="plugins" value="" data-am-ucheck />
<span>全选</span>
</label>
<span>{{:MyLang('common_service.role.form_item_plugins_tips')}}</span>
<span class="am-color-red">{{:MyLang('common_service.role.form_item_plugins_tips')}}</span>
</div>
<ul class="tree-list tree-plugins am-flex am-flex-warp">
{{if !empty($power['plugins'])}}

View File

@ -2,7 +2,7 @@
<!-- right content start -->
<div class="content-right">
<div class="content bk-am-color-white am-padding-0">
<div class="content am-background-white am-padding-0">
<!-- form start -->
<form class="am-form form-validation am-form-full-screen am-form-popup-sticky" action="{{:MyUrl('admin/shortcutmenu/save')}}" method="POST" request-type="ajax-fun" request-value="ShortCutMenuFormSaveBack" enctype="multipart/form-data">
<div class="shortcut-menu-sort am-flex-1 am-flex am-flex-col am-flex-warp am-padding">

View File

@ -111,6 +111,24 @@
</div>
</div>
<div class="am-form-group">
<label class="am-block">{{$data.home_site_title_icon.name}}<span class="am-form-group-label-tips">{{$data.home_site_title_icon.describe}}</span></label>
<div class="am-form-file-upload-container">
<ul class="plug-file-upload-view home_site_title_icon-images-view" data-form-name="home_site_title_icon" data-max-number="1" data-dialog-type="images" data-is-eye="1" data-suffix=".ico">
<li class="plug-file-upload-submit" data-view-tag="ul.home_site_title_icon-images-view">
{{if empty($data['home_site_title_icon']['value'])}}
<i class="iconfont icon-upload-add"></i>
{{else /}}
<input type="text" name="home_site_title_icon" value="{{$data.home_site_title_icon.value}}" />
<img src="{{:AttachmentPathViewHandle($data.home_site_title_icon.value)}}" />
<i class="iconfont icon-close"></i>
<i class="iconfont icon-eye"></i>
{{/if}}
</li>
</ul>
</div>
</div>
<div class="am-form-group">
<label>{{$data.common_timezone.name}}<span class="am-form-group-label-tips">{{$data.common_timezone.describe}}</span></label>
<select name="{{$data.common_timezone.only_tag}}" class="am-radius chosen-select" data-placeholder="{{$data.common_timezone.name}}" data-validation-message="{{$data.common_timezone.error_tips}}" required>

View File

@ -179,16 +179,6 @@
{{/foreach}}
</div>
</div>
<div class="am-form-group">
<label>{{$data.home_extraction_address_position.name}}<span class="am-form-group-label-tips">{{$data.home_extraction_address_position.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_extraction_address_position.only_tag}}" data-validation-message="{{$data.home_extraction_address_position.error_tips}}" required {{if isset($data['home_extraction_address_position']['value']) and $data['home_extraction_address_position']['value'] eq $v['value']}}checked{{/if}} data-am-ucheck>{{$v.name}}
</label>
{{/foreach}}
</div>
</div>
</div>
<!-- 多语言 -->

View File

@ -43,6 +43,44 @@
</div>
</div>
<div class="am-form-group">
<label>{{$data.home_extraction_address_position.name}}</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_extraction_address_position.only_tag}}" data-validation-message="{{$data.home_extraction_address_position.error_tips}}" required {{if isset($data['home_extraction_address_position']['value']) and $data['home_extraction_address_position']['value'] eq $v['value']}}checked{{/if}} data-am-ucheck>{{$v.name}}
</label>
{{/foreach}}
</div>
<div class="am-tips-card">
<p>{{$data.home_extraction_address_position.describe}}</p>
</div>
</div>
<!-- 下单指定时间 -->
<div class="am-form-group">
<label>{{$data.common_buy_datetime_info.name}}<span class="am-form-group-label-tips">{{$data.common_buy_datetime_info.describe}}</span></label>
<div class="am-checkbox-group">
{{foreach $common_buy_datetime_config_list as $v}}
<label class="am-checkbox-inline">
<input type="checkbox" name="{{$data.common_buy_datetime_info.only_tag}}" value="{{$v.value}}" {{if isset($data['common_buy_datetime_info']['value']) and in_array($v['value'], $data['common_buy_datetime_info']['value'])}}checked{{/if}} data-validation-message="{{$data.common_buy_datetime_info.error_tips}}" data-am-ucheck> {{$v.name}}
</label>
{{/foreach}}
</div>
</div>
<!-- 下单联系信息 -->
<div class="am-form-group">
<label>{{$data.common_buy_extraction_contact_info.name}}<span class="am-form-group-label-tips">{{$data.common_buy_extraction_contact_info.describe}}</span></label>
<div class="am-checkbox-group">
{{foreach $common_buy_extraction_contact_config_list as $v}}
<label class="am-checkbox-inline">
<input type="checkbox" name="{{$data.common_buy_extraction_contact_info.only_tag}}" value="{{$v.value}}" {{if isset($data['common_buy_extraction_contact_info']['value']) and in_array($v['value'], $data['common_buy_extraction_contact_info']['value'])}}checked{{/if}} data-validation-message="{{$data.common_buy_extraction_contact_info.error_tips}}" data-am-ucheck> {{$v.name}}
</label>
{{/foreach}}
</div>
</div>
<!-- 库存 -->
<div class="am-form-group">
<label>{{$data.common_is_deduction_inventory.name}}</label>
@ -82,29 +120,6 @@
</div>
</div>
<!-- 订单支付 -->
<div class="am-form-group">
<label>{{$data.home_is_enable_order_bulk_pay.name}}<span class="am-form-group-label-tips">{{$data.home_is_enable_order_bulk_pay.describe}}</span></label>
<div class="am-radio-group">
{{foreach $common_is_text_list as $v}}
<label class="am-radio-inline">
<input type="radio" value="{{$v.id}}" name="{{$data.home_is_enable_order_bulk_pay.only_tag}}" data-validation-message="{{$data.home_is_enable_order_bulk_pay.error_tips}}" required {{if isset($data['home_is_enable_order_bulk_pay']['value']) and $data['home_is_enable_order_bulk_pay']['value'] eq $v['id']}}checked{{/if}} data-am-ucheck>{{$v.name}}
</label>
{{/foreach}}
</div>
</div>
<div class="am-form-group">
<label>{{$data.common_is_pay_price_must_max_equal.name}}<span class="am-form-group-label-tips">{{$data.common_is_pay_price_must_max_equal.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.common_is_pay_price_must_max_equal.only_tag}}" data-validation-message="{{$data.common_is_pay_price_must_max_equal.error_tips}}" required {{if isset($data['common_is_pay_price_must_max_equal']['value']) and $data['common_is_pay_price_must_max_equal']['value'] eq $v['value']}}checked{{/if}} data-am-ucheck>{{$v.name}}
</label>
{{/foreach}}
</div>
</div>
<!-- 线下支付 -->
<div class="am-form-group">
<label>{{$data.common_is_under_line_order_normal.name}}</label>
<div class="am-radio-group">
@ -119,7 +134,6 @@
</div>
</div>
<!-- 虚拟订单直接提交支付 -->
<div class="am-form-group">
<label>{{$data.common_fictitious_order_direct_pay.name}}</label>
<div class="am-radio-group">
@ -134,25 +148,24 @@
</div>
</div>
<!-- 下单指定时间 -->
<div class="am-form-group">
<label>{{$data.common_buy_datetime_info.name}}</label>
<div class="am-checkbox-group">
{{foreach $common_buy_datetime_config_list as $v}}
<label class="am-checkbox-inline">
<input type="checkbox" name="{{$data.common_buy_datetime_info.only_tag}}" value="{{$v.value}}" {{if isset($data['common_buy_datetime_info']['value']) and in_array($v['value'], $data['common_buy_datetime_info']['value'])}}checked{{/if}} data-validation-message="{{$data.common_buy_datetime_info.error_tips}}" data-am-ucheck> {{$v.name}}
<label>{{$data.common_is_pay_price_must_max_equal.name}}<span class="am-form-group-label-tips">{{$data.common_is_pay_price_must_max_equal.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.common_is_pay_price_must_max_equal.only_tag}}" data-validation-message="{{$data.common_is_pay_price_must_max_equal.error_tips}}" required {{if isset($data['common_is_pay_price_must_max_equal']['value']) and $data['common_is_pay_price_must_max_equal']['value'] eq $v['value']}}checked{{/if}} data-am-ucheck>{{$v.name}}
</label>
{{/foreach}}
</div>
</div>
<!-- 下单联系信息 -->
<!-- 订单支付 -->
<div class="am-form-group">
<label>{{$data.common_buy_extraction_contact_info.name}}</label>
<div class="am-checkbox-group">
{{foreach $common_buy_extraction_contact_config_list as $v}}
<label class="am-checkbox-inline">
<input type="checkbox" name="{{$data.common_buy_extraction_contact_info.only_tag}}" value="{{$v.value}}" {{if isset($data['common_buy_extraction_contact_info']['value']) and in_array($v['value'], $data['common_buy_extraction_contact_info']['value'])}}checked{{/if}} data-validation-message="{{$data.common_buy_extraction_contact_info.error_tips}}" data-am-ucheck> {{$v.name}}
<label>{{$data.home_is_enable_order_bulk_pay.name}}<span class="am-form-group-label-tips">{{$data.home_is_enable_order_bulk_pay.describe}}</span></label>
<div class="am-radio-group">
{{foreach $common_is_text_list as $v}}
<label class="am-radio-inline">
<input type="radio" value="{{$v.id}}" name="{{$data.home_is_enable_order_bulk_pay.only_tag}}" data-validation-message="{{$data.home_is_enable_order_bulk_pay.error_tips}}" required {{if isset($data['home_is_enable_order_bulk_pay']['value']) and $data['home_is_enable_order_bulk_pay']['value'] eq $v['id']}}checked{{/if}} data-am-ucheck>{{$v.name}}
</label>
{{/foreach}}
</div>

View File

@ -135,11 +135,13 @@
</div>
<div class="am-form-group">
<label>{{$data.home_search_params_type.name}}<span class="am-form-group-label-tips">{{$data.home_search_params_type.describe}}</span></label>
<select name="{{$data.home_search_params_type.only_tag}}" multiple="multiple" class="am-radius chosen-select" data-placeholder="{{$data.home_search_params_type.name}}" data-validation-message="{{$data.home_search_params_type.error_tips}}">
<div class="am-checkbox-group">
{{foreach $common_goods_parameters_type_list as $v}}
<option value="{{$v.value}}" {{if isset($data['home_search_params_type']['value']) and in_array($v['value'], $data['home_search_params_type']['value'])}}selected{{/if}}>{{$v.name}}</option>
<label class="am-checkbox-inline">
<input type="checkbox" value="{{$v.value}}" name="{{$data.home_search_params_type.only_tag}}" data-validation-message="{{$data.home_search_params_type.error_tips}}" {{if isset($data['home_search_params_type']['value']) and in_array($v['value'], $data['home_search_params_type']['value'])}}checked{{/if}} data-am-ucheck>{{$v.name}}
</label>
{{/foreach}}
</select>
</div>
</div>
<div class="am-form-group">
<label>{{$data.home_search_is_spec.name}}<span class="am-form-group-label-tips">{{$data.home_search_is_spec.describe}}</span></label>

View File

@ -37,24 +37,29 @@
<div class="item am-active" data-key="base-config-title">
<!-- 展示型 -->
<div class="am-form-group">
<label class="am-block">{{$data.common_is_exhibition_mode_btn_text.name}}<span class="am-form-group-label-tips">{{$data.common_is_exhibition_mode_btn_text.describe}}</span></label>
<input type="text" name="{{$data.common_is_exhibition_mode_btn_text.only_tag}}" placeholder="{{$data.common_is_exhibition_mode_btn_text.describe}}" data-validation-message="{{$data.common_is_exhibition_mode_btn_text.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_is_exhibition_mode_btn_text.value}}"{{/if}} />
<label class="am-block">{{$data.common_is_exhibition_mode_btn_text.name}}</label>
<input type="text" name="{{$data.common_is_exhibition_mode_btn_text.only_tag}}" placeholder="{{$data.common_is_exhibition_mode_btn_text.name}}" data-validation-message="{{$data.common_is_exhibition_mode_btn_text.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_is_exhibition_mode_btn_text.value}}"{{/if}} />
<div class="am-tips-card">
<p>{{$data.common_is_exhibition_mode_btn_text.describe}}</p>
</div>
</div>
<!-- 站点类型 -->
<div class="platform-list-value-container">
<div class="am-form-group platform-list-value-container">
<label class="am-block am-margin-bottom-sm">{{$data.common_site_type.name}}<span class="am-form-group-label-tips">{{$data.common_site_type.describe}}</span></label>
<div class="site-type-list">
<div class="site-type-list am-flex am-flex-warp am-gap-2 am-margin-top-sm">
{{foreach $common_platform_type as $k=>$v}}
<div class="am-flex am-flex-row am-flex-items-center am-gap-1 {{if $k gt 0}}am-margin-top-sm{{/if}}">
<div class="am-flex am-flex-row am-gap-2">
<span class="am-text-right">{{$v.name}}</span>
<select name="{{$data.common_site_type.only_tag}}[{{$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']])}}">
{{if !empty($common_site_type_list)}}
{{if !empty($common_site_type_list)}}
<div class="am-radio-group">
{{foreach $common_site_type_list as $site}}
<option value="{{$site.value}}" {{if !empty($data['common_site_type']) and !empty($data['common_site_type']['value']) and isset($data['common_site_type']['value'][$v['value']]) and $data['common_site_type']['value'][$v['value']] eq $site['value']}}selected{{/if}}>{{$site.name}}</option>
<label class="am-radio-inline">
<input type="radio" value="{{$site.value}}" name="{{$data.common_site_type.only_tag}}[{{$v.value}}]" data-validation-message="{{:MyLang('site.site_setup_choice_payment_message', ['name'=>$v['name']])}}" {{if (!empty($data['common_site_type']) and !empty($data['common_site_type']['value']) and isset($data['common_site_type']['value'][$v['value']]) and $data['common_site_type']['value'][$v['value']] eq $site['value']) or ((empty($data['common_site_type']) or empty($data['common_site_type']['value']) or !isset($data['common_site_type']['value'][$v['value']])) and isset($site['checked']) and $site['checked'] eq true)}}checked{{/if}} data-am-ucheck>{{$site.name}}
</label>
{{/foreach}}
{{/if}}
</select>
</div>
{{/if}}
</div>
{{/foreach}}
</div>
@ -105,12 +110,18 @@
<!-- 虚拟销售 -->
<div class="item" data-key="site-item-fictitious">
<div class="am-form-group">
<label class="am-block">{{$data.common_site_fictitious_return_title.name}}<span class="am-form-group-label-tips">{{$data.common_site_fictitious_return_title.describe}}</span></label>
<input type="text" name="{{$data.common_site_fictitious_return_title.only_tag}}" placeholder="{{$data.common_site_fictitious_return_title.describe}}" data-validation-message="{{$data.common_site_fictitious_return_title.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_site_fictitious_return_title.value}}"{{/if}} />
<label class="am-block">{{$data.common_site_fictitious_return_title.name}}</label>
<input type="text" name="{{$data.common_site_fictitious_return_title.only_tag}}" placeholder="{{$data.common_site_fictitious_return_title.name}}" data-validation-message="{{$data.common_site_fictitious_return_title.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_site_fictitious_return_title.value}}"{{/if}} />
<div class="am-tips-card">
<p>{{$data.common_site_fictitious_return_title.describe}}</p>
</div>
</div>
<div class="am-form-group">
<label class="am-block">{{$data.common_site_fictitious_return_tips.name}}<span class="am-form-group-label-tips">{{$data.common_site_fictitious_return_tips.describe}}</span></label>
<label class="am-block">{{$data.common_site_fictitious_return_tips.name}}</label>
<textarea rows="4" name="{{$data.common_site_fictitious_return_tips.only_tag}}" class="am-radius" placeholder="{{$data.common_site_fictitious_return_tips.name}}" data-validation-message="{{$data.common_site_fictitious_return_tips.error_tips}}">{{if !empty($data)}}{{$data.common_site_fictitious_return_tips.value}}{{/if}}</textarea>
<div class="am-tips-card">
<p>{{$data.common_site_fictitious_return_tips.describe}}</p>
</div>
</div>
</div>
</div>

View File

@ -73,54 +73,56 @@
<input name="is_default" value="1" type="checkbox" data-off-text="{{:MyLang('no_title')}}" data-on-text="{{:MyLang('yes_title')}}" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="49" data-am-switch {{if isset($data['is_default']) and $data['is_default'] eq 1}}checked="true"{{/if}} />
</div>
<div class="am-form-group">
<label>{{:MyLang('common_service.useraddress.form_item_idcard_name')}}<a href="javascript:;" class="am-icon-question-circle am-margin-left-xs" data-am-popover="{content: '{{:MyLang('common_service.useraddress.form_item_idcard_name_tips')}}', trigger: 'hover focus', theme: 'sm'}"></a></label>
<input type="text" name="idcard_name" placeholder="{{:MyLang('common_service.useraddress.form_item_idcard_name_message')}}" minlength="0" maxlength="30" data-validation-message="{{:MyLang('common_service.useraddress.form_item_idcard_name_message')}}" class="am-radius" {{if !empty($data['idcard_name'])}} value="{{$data.idcard_name}}"{{/if}} />
</div>
<div class="am-form-group">
<label>{{:MyLang('common_service.useraddress.form_item_idcard_number')}}<a href="javascript:;" class="am-icon-question-circle am-margin-left-xs" data-am-popover="{content: '{{:MyLang('common_service.useraddress.form_item_idcard_number_tips')}}', trigger: 'hover focus', theme: 'sm'}"></a></label>
<input type="text" name="idcard_number" placeholder="{{:MyLang('common_service.useraddress.form_item_idcard_number_message')}}" minlength="0" maxlength="18" data-validation-message="{{:MyLang('common_service.useraddress.form_item_idcard_number_message')}}" class="am-radius" {{if !empty($data['idcard_number'])}} value="{{$data.idcard_number}}"{{/if}} />
</div>
{{if empty($data) or empty($data['user_id'])}}
{{if MyC('home_user_address_idcard_status') eq 1}}
<div class="am-form-group">
<div class="am-tips-card">
<p>{{:MyLang('common_service.useraddress.form_item_idcard_no_user_tips')}}</p>
</div>
<label>{{:MyLang('common_service.useraddress.form_item_idcard_name')}}<a href="javascript:;" class="am-icon-question-circle am-margin-left-xs" data-am-popover="{content: '{{:MyLang('common_service.useraddress.form_item_idcard_name_tips')}}', trigger: 'hover focus', theme: 'sm'}"></a></label>
<input type="text" name="idcard_name" placeholder="{{:MyLang('common_service.useraddress.form_item_idcard_name_message')}}" minlength="0" maxlength="30" data-validation-message="{{:MyLang('common_service.useraddress.form_item_idcard_name_message')}}" class="am-radius" {{if !empty($data['idcard_name'])}} value="{{$data.idcard_name}}"{{/if}} />
</div>
{{else /}}
<div class="am-form-group plug-file-upload-view">
<label>{{:MyLang('common_service.useraddress.form_item_idcard_images')}}<span class="am-form-group-label-tips">{{:MyLang('common_service.useraddress.form_item_idcard_images_tips')}}</span></label>
<div class="am-nbfc user-address-idcard-images am-flex">
<div class="item am-margin-right-lg">
<ul class="plug-file-upload-view images-idcard_front" data-form-name="idcard_front" data-max-number="1" data-dialog-type="images">
<li>
{{if !empty($data['idcard_front'])}}
<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}}" />
{{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>
</div>
<div class="item">
<ul class="plug-file-upload-view images-idcard_back" data-form-name="idcard_back" data-max-number="1" data-dialog-type="images">
<li>
{{if !empty($data['idcard_back'])}}
<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}}" />
{{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>
<div class="am-form-group">
<label>{{:MyLang('common_service.useraddress.form_item_idcard_number')}}<a href="javascript:;" class="am-icon-question-circle am-margin-left-xs" data-am-popover="{content: '{{:MyLang('common_service.useraddress.form_item_idcard_number_tips')}}', trigger: 'hover focus', theme: 'sm'}"></a></label>
<input type="text" name="idcard_number" placeholder="{{:MyLang('common_service.useraddress.form_item_idcard_number_message')}}" minlength="0" maxlength="18" data-validation-message="{{:MyLang('common_service.useraddress.form_item_idcard_number_message')}}" class="am-radius" {{if !empty($data['idcard_number'])}} value="{{$data.idcard_number}}"{{/if}} />
</div>
{{if empty($data) or empty($data['user_id'])}}
<div class="am-form-group">
<div class="am-tips-card">
<p>{{:MyLang('common_service.useraddress.form_item_idcard_no_user_tips')}}</p>
</div>
</div>
</div>
{{else /}}
<div class="am-form-group plug-file-upload-view">
<label>{{:MyLang('common_service.useraddress.form_item_idcard_images')}}<span class="am-form-group-label-tips">{{:MyLang('common_service.useraddress.form_item_idcard_images_tips')}}</span></label>
<div class="am-nbfc user-address-idcard-images am-flex">
<div class="item am-margin-right-lg">
<ul class="plug-file-upload-view images-idcard_front" data-form-name="idcard_front" data-max-number="1" data-dialog-type="images">
<li>
{{if !empty($data['idcard_front'])}}
<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}}" />
{{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>
</div>
<div class="item">
<ul class="plug-file-upload-view images-idcard_back" data-form-name="idcard_back" data-max-number="1" data-dialog-type="images">
<li>
{{if !empty($data['idcard_back'])}}
<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}}" />
{{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>
</div>
</div>
</div>
{{/if}}
{{/if}}
<div class="am-form-popup-submit">

View File

@ -137,7 +137,7 @@ class Orderaftersale extends Common
'returned_data' => $returned['data'],
'return_only_money_reason' => empty($return_only_money_reason) ? [] : explode("\n", $return_only_money_reason),
'return_money_goods_reason' => empty($return_money_goods_reason) ? [] : explode("\n", $return_money_goods_reason),
'aftersale_type_list' => MyConst('common_order_aftersale_type_list'),
'aftersale_type_list' => OrderAftersaleService::OrderAftersaleChoiceTypeList($order_id),
'return_goods_address' => $return_goods_address,
'editor_path_type' => ResourcesService::EditorPathTypeValue(OrderAftersaleService::EditorAttachmentPathType($this->user['id'], $order_id, $order_detail_id)),
];

View File

@ -0,0 +1,69 @@
<?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\PayLogService;
/**
* 支付日志
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class PayLog extends Common
{
/**
* 构造方法
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-03T12:39:08+0800
*/
public function __construct()
{
// 调用父类前置方法
parent::__construct();
// 是否登录
$this->IsLogin();
}
/**
* 订单列表页面数据
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-02-22T16:50:32+0800
*/
public function Index()
{
$params = $this->data_request;
$params['user_id'] = $this->user['id'];
return ApiService::ApiDataReturn(PayLogService::PayLogPagesListData($params));
}
/**
* 订单详情页面数据
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-02-22T16:50:32+0800
*/
public function Detail()
{
$params = $this->data_request;
$params['user_id'] = $this->user['id'];
return ApiService::ApiDataReturn(PayLogService::PayLogPagesDetailData($params));
}
}
?>

View File

@ -53,8 +53,7 @@ class Region extends Common
['pid', '=', $pid],
],
];
$result = RegionService::RegionNode($params);
return ApiService::ApiDataReturn(SystemBaseService::DataReturn($result));
return ApiService::ApiDataReturn(SystemBaseService::DataReturn(RegionService::RegionNode($params)));
}
/**
@ -67,7 +66,7 @@ class Region extends Common
*/
public function All()
{
return ApiService::ApiDataReturn(RegionService::RegionAll());
return ApiService::ApiDataReturn(SystemBaseService::DataReturn(RegionService::RegionAll()));
}
/**

View File

@ -214,7 +214,7 @@ function IsUserLogin($login_url = null)
function DefaultTheme($theme = null)
{
static $default_theme = null;
if($default_theme === null)
if($default_theme === null || !empty($theme))
{
$cookie_domain = MyFileConfig('common_cookie_domain', '', '', true);
if(!empty($cookie_domain))
@ -1265,7 +1265,7 @@ function GetUrlHost($url)
}
// 判断是否是双后缀
$preg = '/[\w].+\.(com|net|org|gov|ac|bj|sh|tj|cq|he|sn|sx|nm|ln|jl|hl|js|zj|ah|fj|jx|sd|ha|hb|hn|gd|gx|hi|sc|gz|yn|gs|qh|nx|xj|tw|hk|mo|xz|edu|ge|dev|co)\.(cn|nz|mm|ec|my|kz|sg)$/';
$preg = '/[\w].+\.(com|net|org|gov|ac|bj|sh|tj|cq|he|sn|sx|nm|ln|jl|hl|js|zj|ah|fj|jx|sd|ha|hb|hn|gd|gx|hi|sc|gz|yn|gs|qh|nx|xj|tw|hk|mo|xz|edu|ge|dev|co)\.(cn|nz|mm|ec|my|kz|sg|tw)$/';
if(($n > 2) && preg_match($preg, $host))
{
// 双后缀取后3位
@ -3548,7 +3548,16 @@ function RequestGet($value, $timeout = 10)
}
// 本地文件
return file_exists($value) ? file_get_contents($value) : '';
if(file_exists($value))
{
return file_get_contents($value);
} else {
if(file_exists(ROOT.'public'.$value))
{
return file_get_contents(ROOT.'public'.$value);
}
}
return '';
}
/**

View File

@ -118,7 +118,7 @@ class Orderaftersale extends Center
$assign['return_goods_address'] = $return_goods_address;
// 静态数据
$assign['common_order_aftersale_type_list'] = MyConst('common_order_aftersale_type_list');
$assign['common_order_aftersale_type_list'] = OrderAftersaleService::OrderAftersaleChoiceTypeList($order_id);
// 编辑器文件存放地址
$assign['editor_path_type'] = ResourcesService::EditorPathTypeValue(OrderAftersaleService::EditorAttachmentPathType($this->user['id'], $order_id, $order_detail_id));

View File

@ -11,6 +11,7 @@
namespace app\index\controller;
use app\service\ApiService;
use app\service\SystemBaseService;
use app\service\RegionService;
/**
@ -51,7 +52,7 @@ class Region extends Common
['pid', '=', $pid],
],
];
return ApiService::ApiDataReturn(DataReturn('success', 0, RegionService::RegionNode($params)));
return ApiService::ApiDataReturn(SystemBaseService::DataReturn(RegionService::RegionNode($params)));
}
/**
@ -64,7 +65,7 @@ class Region extends Common
*/
public function All()
{
return ApiService::ApiDataReturn(RegionService::RegionAll());
return ApiService::ApiDataReturn(SystemBaseService::DataReturn(RegionService::RegionAll()));
}
/**

View File

@ -109,6 +109,16 @@ class UserGoodsBrowse
'is_point' => 1,
],
],
[
'label' => $lang['access_count'],
'view_type' => 'field',
'view_key' => 'access_count',
'is_sort' => 1,
'search_config' => [
'form_type' => 'section',
'form_name' => 'b.access_count',
],
],
[
'label' => $lang['add_time'],
'view_type' => 'field',

View File

@ -470,6 +470,7 @@ return [
'goods_placeholder' => '請輸入商品名稱/簡述/SEO資訊',
'price' => '銷售價格',
'original_price' => '原價',
'access_count' => '流覽量',
'add_time' => '創建時間',
],
],

View File

@ -474,6 +474,7 @@ return [
'goods_placeholder' => 'Please enter the goods name/brief description/SEO information',
'price' => 'Sales price (yuan)',
'original_price' => 'Original price (yuan)',
'access_count' => 'Access count',
'add_time' => 'Creation time',
],
],

View File

@ -474,6 +474,7 @@ return [
'goods_placeholder' => 'Introduzca el nombre del producto / breve descripción / información seo',
'price' => 'Precio de venta (yuan)',
'original_price' => 'Precio original (yuan)',
'access_count' => 'Vistas',
'add_time' => 'Tiempo de creación',
],
],

View File

@ -475,6 +475,7 @@ return [
'goods_placeholder' => '请输入商品名称/简述/SEO信息',
'price' => '销售价格',
'original_price' => '原价',
'access_count' => '浏览量',
'add_time' => '创建时间',
],
],

View File

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

View File

@ -145,6 +145,7 @@
var __my_http__ = '{{$my_http}}';
var __my_host__ = '{{$my_host}}';
var __my_url__ = '{{$my_url}}';
var __my_view_url__ = '{{$my_view_url}}';
var __my_public_url__ = '{{$my_public_url}}';
var __public__ = '{{$public_host}}';
var __default_theme__ = '{{$default_theme}}';

View File

@ -30,7 +30,7 @@
<!-- 手机端搜索 -->
<form class="am-topbar-form am-topbar-left am-form-inline am-show-sm-only navigation-search" role="search" action="{{:MyUrl('index/search/index')}}" method="POST">
<div class="am-input-group am-input-group-sm">
<input type="text" name="wd" class="am-form-field" placeholder="{{:MyLang('common.search_input_placeholder')}}" value="{{if !empty($params['wd'])}}{{$params.wd}}{{/if}}" autocomplete="off" />
<input type="text" name="wd" class="am-form-field" placeholder="{{:MyLang('common.search_input_placeholder')}}" value="{{if !empty($params['wd'])}}{{$params.wd}}{{/if}}" autocomplete="off" data-is-clearout="0" />
<span class="am-input-group-btn">
<button class="am-btn am-btn-default" type="submit">
<span class="am-icon-search am-icon-xs"></span>

View File

@ -27,7 +27,7 @@
<!-- 搜索框 -->
<form action="{{:MyUrl('index/search/index')}}" method="POST">
<div class="search-group am-radius am-nbfc">
<input id="search-input" name="wd" type="text" placeholder="{{:MyLang('common.search_input_placeholder')}}" value="{{if !empty($params['wd'])}}{{$params.wd}}{{/if}}" autocomplete="off" />
<input id="search-input" name="wd" type="text" placeholder="{{:MyLang('common.search_input_placeholder')}}" value="{{if !empty($params['wd'])}}{{$params.wd}}{{/if}}" autocomplete="off" data-is-clearout="0" />
<button type="submit" id="ai-topsearch" class="submit am-btn-primary">
<span>{{:MyLang('common.search_button_text')}}</span>
</button>

View File

@ -39,7 +39,7 @@
<!-- 搜索框 -->
<form action="{{:MyUrl('index/search/index')}}" method="POST">
<div class="search-group am-radius am-nbfc">
<input id="search-input" name="wd" type="text" placeholder="{{:MyLang('common.search_input_placeholder')}}" value="{{if !empty($params['wd'])}}{{$params.wd}}{{/if}}" autocomplete="off" />
<input id="search-input" name="wd" type="text" placeholder="{{:MyLang('common.search_input_placeholder')}}" value="{{if !empty($params['wd'])}}{{$params.wd}}{{/if}}" autocomplete="off" data-is-clearout="0" />
<button type="submit" id="ai-topsearch" class="submit am-btn-primary">
<span>{{:MyLang('common.search_button_text')}}</span>
</button>

View File

@ -48,42 +48,45 @@ class Common extends BaseController
$assign = [
// 当前方法
'action' => RequestAction(),
// 系统类型
'system_type' => SystemService::SystemTypeValue(),
// 系统环境参数最大数
'env_max_input_vars_count' => SystemService::EnvMaxInputVarsCount(),
// 默认不加载地图api、类型默认百度地图
'is_load_map_api' => 0,
'load_map_type' => MyC('common_map_type', 'baidu', true),
// 页面语言
'lang_data' => SystemService::PageViewLangData(),
// 多语言
'multilingual_default_code' => MultilingualService::GetUserMultilingualValue(),
// 附件host地址
'attachment_host' => SystemBaseService::AttachmentHost(),
// css/js引入host地址
'public_host' => MyConfig('shopxo.public_host'),
// 当前url地址
'my_domain' => __MY_DOMAIN__,
// 当前host地址
'my_host' => __MY_HOST__,
// 当前完整url地址
'my_url' => __MY_URL__,
// 当前完整url地址
'my_view_url' => __MY_VIEW_URL__,
// 项目public目录URL地址
'my_public_url' => __MY_PUBLIC_URL__,
// 当前http类型
'my_http' => __MY_HTTP__,
];

View File

@ -44,6 +44,7 @@
<div class="am-form-group row">
<label>数据库服务器<span class="am-form-group-label-tips-must">*</span></label>
<input type="text" name="DB_HOST" placeholder="数据库服务器" value="127.0.0.1" class="am-radius am-input-sm" data-validation-message="请填写数据库服务器地址" required />
<a href="javascript:;" class="am-icon-question-circle text-copy-submit" data-am-popover="{content: '如果连接不通,可以尝试使用 localhost 试试!', trigger: 'hover focus', theme: 'sm'}" data-value="localhost"></a>
</div>
<div class="am-form-group row">
<label>数据库端口<span class="am-form-group-label-tips-must">*</span></label>
@ -52,6 +53,7 @@
<div class="am-form-group row">
<label>数据库名<span class="am-form-group-label-tips-must">*</span></label>
<input type="text" name="DB_NAME" placeholder="数据库名" value="" class="am-radius am-input-sm" data-validation-message="请填写数据库名" required />
<a href="javascript:;" class="am-icon-question-circle" data-am-popover="{content: '请先创建好数据库,编码和选择的保持一致!', trigger: 'hover focus', theme: 'sm'}"></a>
</div>
<div class="am-form-group row">
<label>数据库用户名<span class="am-form-group-label-tips-must">*</span></label>

View File

@ -56,6 +56,7 @@
var __my_http__ = '{{$my_http}}';
var __my_host__ = '{{$my_host}}';
var __my_url__ = '{{$my_url}}';
var __my_view_url__ = '{{$my_view_url}}';
var __my_public_url__ = '{{$my_public_url}}';
var __public__ = '{{$public_host}}';
var __seo_url_suffix__ = '{{:MyC("home_seo_url_html_suffix", "html", true)}}';

View File

@ -76,6 +76,9 @@ return [
'upload_images_max_tips' => '最多上傳{value}張圖片',
'upload_video_max_tips' => '最多上傳{value}個視頻',
'upload_annex_max_tips' => '最多上傳{value}個附件',
'upload_images_suffix_tips' => '第{value}張圖片格式有誤',
'upload_video_suffix_tips' => '第{value}個視頻格式有誤',
'upload_annex_suffix_tips' => '第{value}個附件格式有誤',
'form_config_type_params_tips' => '表單[類型]參數配寘有誤',
'form_config_value_params_tips' => '表單[類型]參數配寘有誤',
'form_call_fun_not_exist_tips' => '表單定義的方法未定義',
@ -338,6 +341,7 @@ return [
'upd_time_title' => '更新時間',
'price_min_title' => '最低價格',
'price_max_title' => '最高價格',
'shop_order' => '商城訂單',
'back_home_title' => '回到首頁',
'shop_home_title' => '商城首頁',
'home_title' => '首頁',
@ -451,6 +455,7 @@ return [
'refuse_title' => '拒絕',
'pass_title' => '通過',
'agree_title' => '同意',
'expire_title' => '過期',
'order_title' => '訂單',
'install_title' => '安裝',
'uninstall_title' => '卸載',
@ -580,6 +585,7 @@ return [
'custom_title' => '自定義',
'customer_title' => '客戶',
'customer_info_title' => '客戶資訊',
'region_title' => '地區',
// 商品基础相关
'goods_name' => '商品名稱',
'goods_add_name' => '商品添加',
@ -1163,6 +1169,23 @@ return [
3 => '價格',
4 => '最新',
],
// 用户商品收藏排序类型
'common_goods_favor_order_by_type_list' => [
0 => '綜合',
1 => '銷量',
2 => '熱度',
3 => '價格',
4 => '最新',
],
// 用户商品浏览排序类型
'common_goods_browse_order_by_type_list' => [
0 => '綜合',
1 => '銷量',
2 => '熱度',
3 => '價格',
4 => '最新',
5 => '用戶瀏覽',
],
// 数据排序规则
'common_data_order_by_rule_list' => [
0 => '降序desc',
@ -1645,6 +1668,8 @@ return [
],
// 配置信息
'config' => [
'site_title_icon_power_tips' => '瀏覽器標題圖標無許可權',
'site_title_icon_fail_tips' => '瀏覽器標題圖標保存失敗',
'route_dir_no_power_tips' => '路由目錄沒有操作許可權',
'route_file_no_power_tips' => '路由設定檔沒有操作許可權',
'route_file_config_no_exist_tips' => '路由規則檔案不存在',
@ -1730,7 +1755,7 @@ return [
'upload_config_file_error_tips' => '配寘資訊為空或有誤',
'upload_config_file_handle_fail_tips' => '設定檔處理失敗',
'upload_invalid_packet_tips' => '無效數据包',
'preview_url_tips' => '請在後臺[ 手機->基礎配寘 ]先配寘手機端h5地址h5端需要使用uniapp版本打包',
'preview_url_tips' => '如需h5預覽效果請在後臺[手機->基礎配寘]先配寘手機端h5地址h5端需要使用uniapp版本打包',
'form_item_desc' => '描述',
'form_item_desc_message' => '描述內容格式2~60個字元',
'form_item_apply_version' => '適用系統版本',
@ -1874,8 +1899,8 @@ return [
'form_item_brand_message' => '請選擇品牌',
'form_item_place_origin' => '生產地',
'form_item_place_origin_message' => '請選擇生產地',
'form_item_inventory_unit' => '庫存組織',
'form_item_inventory_unit_message' => '庫存組織格式1~6個字',
'form_item_inventory_unit' => '計量單位',
'form_item_inventory_unit_message' => '計量單位格式1~6個字',
'form_item_give_integral' => '購買贈送積分比例',
'form_item_give_integral_tips' => [
'1.按照商品金額比例乘以數量的比例進行發放',
@ -2361,6 +2386,7 @@ return [
'pay_log_insert_fail_tips' => '支付訂單添加失敗',
'pay_log_id_empty_tips' => '日誌id有誤',
'pay_log_update_fail_tips' => '日誌訂單更新失敗',
'pay_log_value_no_data_tips' => '無支付業務數據',
],
// 支付方式
'payment' => [
@ -3433,6 +3459,11 @@ return [
'desc' => '建議使用png格式建議300*300px',
'tips' => '請上傳正方形logo',
],
'home_site_title_icon' => [
'name' => '瀏覽器標題圖標',
'desc' => '使用ico格式建議128*128px',
'tips' => '請上傳瀏覽器標題圖標',
],
'home_user_reg_type' => [
'name' => '注册管道',
'desc' => '未選擇、前端網站將無法注册,可選擇[簡訊,郵箱,用戶名]',
@ -3882,7 +3913,7 @@ return [
],
'home_is_enable_userregister_agreement' => [
'name' => '用戶註冊協定',
'desc' => '默認關閉,開啟後用戶註冊需要同意協定才可以注册',
'desc' => '默認關閉,開啟後用戶註冊需要同意協定才可以注册僅對web端有效',
'tips' => '請選擇是否啟用用戶註冊協定',
],
'home_order_aftersale_return_goods_contacts_name' => [
@ -4053,16 +4084,17 @@ return [
],
'common_is_exhibition_mode_btn_text' => [
'name' => '展示型操作名稱',
'desc' => '默認立即諮詢',
'desc' => '默認立即諮詢,展示模式下商品頁面的【立即購買】按鈕占位名稱',
'tips' => '請填寫展示型操作名稱',
],
'common_site_fictitious_return_title' => [
'name' => '虛擬資訊標題',
'desc' => '默認金鑰資訊',
'desc' => '默認金鑰資訊,用戶購買虛擬商品後、在訂單詳情裡面展示虛擬資訊的標題',
'tips' => '請填寫虛擬資訊標題',
],
'common_site_fictitious_return_tips' => [
'name' => '提示資訊',
'desc' => '用戶購買虛擬商品後、在訂單詳情裡面展示給用戶的提示資訊',
'tips' => '請填寫提示資訊',
],
'common_app_mini_alipay_tnt_inst_id' => [
@ -4108,7 +4140,7 @@ return [
],
'common_is_mobile_concise_model' => [
'name' => '手機簡潔模式',
'desc' => '默認否',
'desc' => '默認否開啟後web端底部選單、友情連結不顯示',
'tips' => '請選擇是否手機簡潔模式',
],
'common_app_weixin_liveplayer' => [
@ -4319,9 +4351,9 @@ return [
'desc' => '驗證碼變數識別字[ #code# ]',
],
'home_extraction_address_position' => [
'name' => '自提選擇地理位置',
'desc' => '默認關閉',
'tips' => '請選擇自提選擇地理位置',
'name' => '下單自提選擇地理位置',
'desc' => '默認關閉,開啟後下單選擇自提地址之前需要先選擇用戶當前位置、地址以最近展示',
'tips' => '請選擇下單自提選擇地理位置',
],
'home_search_is_keywords_where_and' => [
'name' => '蒐索多個關鍵字並且關係',
@ -4548,12 +4580,12 @@ return [
],
'common_buy_datetime_info' => [
'name' => '下單指定時間',
'desc' => '',
'desc' => '僅同城、自提訂單模式下有效',
'tips' => '請選擇下單指定時間',
],
'common_buy_extraction_contact_info' => [
'name' => '下單聯系資訊',
'desc' => '',
'desc' => '僅自提訂單模式下有效',
'tips' => '請選擇下單聯系資訊',
],
'home_search_history_record' => [

View File

@ -76,6 +76,9 @@ return [
'upload_images_max_tips' => 'Upload up to {value} pictures',
'upload_video_max_tips' => 'Upload {value} videos at most',
'upload_annex_max_tips' => 'Upload up to {value} attachments',
'upload_images_suffix_tips' => 'The format of the {value} th image is incorrect',
'upload_video_suffix_tips' => 'The {value} th video format is incorrect',
'upload_annex_suffix_tips' => 'The format of the {value} th attachment is incorrect',
'form_config_type_params_tips' => 'The form [type] parameter configuration is incorrect',
'form_config_value_params_tips' => 'The form [type] parameter configuration is incorrect',
'form_call_fun_not_exist_tips' => 'The method defined by the form is not defined',
@ -338,6 +341,7 @@ return [
'upd_time_title' => 'Update Time',
'price_min_title' => 'Lowest price',
'price_max_title' => 'Maximum price',
'shop_order' => 'Mall orders',
'back_home_title' => 'Back Home',
'shop_home_title' => 'Shop Home',
'home_title' => 'Home',
@ -451,6 +455,7 @@ return [
'refuse_title' => 'Refuse',
'pass_title' => 'Pass',
'agree_title' => 'Agree',
'expire_title' => 'Expire',
'order_title' => 'Order',
'install_title' => 'Install',
'uninstall_title' => 'Uninstall',
@ -580,6 +585,7 @@ return [
'custom_title' => 'Custom',
'customer_title' => 'customer',
'customer_info_title' => 'Customer Information',
'region_title' => 'Area',
// 商品基础相关
'goods_name' => 'Goods Name',
'goods_add_name' => 'Goods Add',
@ -1163,6 +1169,23 @@ return [
3 => 'Price',
4 => 'newest',
],
// 用户商品收藏排序类型
'common_goods_favor_order_by_type_list' => [
0 => 'comprehensive',
1 => 'sales volume',
2 => 'degree of heat',
3 => 'Price',
4 => 'newest',
],
// 用户商品浏览排序类型
'common_goods_browse_order_by_type_list' => [
0 => 'comprehensive',
1 => 'sales volume',
2 => 'degree of heat',
3 => 'Price',
4 => 'newest',
5 => 'User browse',
],
// 数据排序规则
'common_data_order_by_rule_list' => [
0 => 'Descending order (DESC)',
@ -1642,6 +1665,8 @@ return [
],
// 配置信息
'config' => [
'site_title_icon_power_tips' => 'Browser title icon has no permission',
'site_title_icon_fail_tips' => 'Failed to save browser title icon',
'route_dir_no_power_tips' => 'Routing directory does not have operation permission',
'route_file_no_power_tips' => 'Routing profile does not have operation permissions',
'route_file_config_no_exist_tips' => 'Routing rule file does not exist',
@ -1727,7 +1752,7 @@ return [
'upload_config_file_error_tips' => 'Configuration information is empty or incorrect',
'upload_config_file_handle_fail_tips' => 'Configuration file processing failed',
'upload_invalid_packet_tips' => 'Invalid data packet',
'preview_url_tips' => 'Please configure the H5 address on the mobile end in the background [Phone ->Basic Configuration] first (H5 end needs to be packaged using Uniapp version)',
'preview_url_tips' => 'If you need the H5 preview effect, please configure the H5 address on the mobile end in the background [Phone ->Basic Configuration] first (the H5 end needs to be packaged using the Uniapp version)',
'form_item_desc' => 'describe',
'form_item_desc_message' => 'Describe content format 2-60 characters',
'form_item_apply_version' => 'Applicable system version',
@ -1871,8 +1896,8 @@ return [
'form_item_brand_message' => 'Please select a brand',
'form_item_place_origin' => 'Place of production',
'form_item_place_origin_message' => 'Please select the place of production',
'form_item_inventory_unit' => 'Inventory unit',
'form_item_inventory_unit_message' => 'Inventory unit format 1~6 characters',
'form_item_inventory_unit' => 'unit of measurement',
'form_item_inventory_unit_message' => 'unit of measurement format 1~6 characters',
'form_item_give_integral' => 'Percentage of free points for purchase',
'form_item_give_integral_tips' => [
'1. Distribute according to the proportion of goods amount multiplied by quantity',
@ -2358,6 +2383,7 @@ return [
'pay_log_insert_fail_tips' => 'Failed to add payment order',
'pay_log_id_empty_tips' => 'The log ID is incorrect',
'pay_log_update_fail_tips' => 'Log order update failed',
'pay_log_value_no_data_tips' => 'No payment business data',
],
// 支付方式
'payment' => [
@ -3435,6 +3461,11 @@ return [
'desc' => 'PNG format is recommended. 300*300px is recommended',
'tips' => 'Please upload the square logo',
],
'home_site_title_icon' => [
'name' => 'Browser title icon',
'desc' => 'Using ICO format, it is recommended to use 128 * 128px',
'tips' => 'Please upload the browser title icon',
],
'home_user_reg_type' => [
'name' => 'Registration method',
'desc' => 'If it is not selected, the front-end site cannot be registered. You can select [SMS, email, user name]',
@ -3914,7 +3945,7 @@ return [
],
'home_is_enable_userregister_agreement' => [
'name' => 'User registration agreement',
'desc' => 'It is closed by default. After it is enabled, user registration can only be registered after agreeing to the agreement',
'desc' => 'By default, it is turned off. After turning it on, users need to agree to the protocol before they can register, which is only valid for the web end',
'tips' => 'Please select whether to enable user registration agreement',
],
'home_order_aftersale_return_goods_contacts_name' => [
@ -4085,16 +4116,17 @@ return [
],
'common_is_exhibition_mode_btn_text' => [
'name' => 'Display type operation name',
'desc' => 'Default immediate consultation',
'desc' => 'Default immediate consultation, the name occupied by the Buy Now button on the product page in display mode',
'tips' => 'Please fill in the name of display type operation',
],
'common_site_fictitious_return_title' => [
'name' => 'Virtual information title',
'desc' => 'Default key information',
'desc' => 'Default key information, the title of the virtual information displayed in the order details after the user purchases the virtual product',
'tips' => 'Please fill in the title of virtual information',
],
'common_site_fictitious_return_tips' => [
'name' => 'Prompt information',
'desc' => 'Reminder information displayed to users in order details after purchasing virtual goods',
'tips' => 'Please fill in the prompt information',
],
'common_app_mini_alipay_tnt_inst_id' => [
@ -4140,7 +4172,7 @@ return [
],
'common_is_mobile_concise_model' => [
'name' => 'Mobile phone simple mode',
'desc' => 'Default no',
'desc' => 'No by default, the bottom menu and friendship links on the web end will not be displayed when enabled',
'tips' => 'Please select whether the phone is in compact mode',
],
'common_app_weixin_liveplayer' => [
@ -4353,9 +4385,9 @@ return [
'tips' => '',
],
'home_extraction_address_position' => [
'name' => 'Self-selected geographical location',
'desc' => 'Default off',
'tips' => 'Please select Self-delivery and geographical location',
'name' => 'Order self pickup, choose geographical location',
'desc' => 'By default, it is turned off. Before placing an order and selecting a self pickup address, you need to first select the users current location and address for the most recent display',
'tips' => 'Please choose to place an order for self pickup and select a geographical location',
],
'home_search_is_keywords_where_and' => [
'name' => 'Search for multiple keywords and relationships',
@ -4586,12 +4618,12 @@ return [
],
'common_buy_datetime_info' => [
'name' => 'Order specified time',
'desc' => '',
'desc' => 'Only valid under the same city and self pickup order mode',
'tips' => 'Please select the designated time for placing the order',
],
'common_buy_extraction_contact_info' => [
'name' => 'Order contact information',
'desc' => '',
'desc' => 'Only valid in self pickup order mode',
'tips' => 'Please select the contact information for placing an order',
],
'home_search_history_record' => [

View File

@ -71,11 +71,14 @@ return [
'operate_download_name' => 'Descargar',
'operate_download_fail_tips' => 'Falló la descarga',
'select_not_chosen_tips' => 'Por favor, seleccione el elemento',
'select_chosen_min_tips' => 'Seleccione al menos el elemento (valor).',
'select_chosen_max_tips' => 'Seleccione como máximo el elemento (valor).',
'upload_images_max_tips' => 'Cargar hasta un máximo de (...) imágenes',
'upload_video_max_tips' => 'Cargar hasta un máximo de valor vídeos',
'upload_annex_max_tips' => 'Cargar hasta un máximo de (...) archivos adjuntos',
'select_chosen_min_tips' => 'Seleccione al menos el elemento {value}.',
'select_chosen_max_tips' => 'Seleccione como máximo el elemento {value}.',
'upload_images_max_tips' => 'Cargar hasta un máximo de {value} imágenes',
'upload_video_max_tips' => 'Cargar hasta un máximo de {value} vídeos',
'upload_annex_max_tips' => 'Cargar hasta un máximo de {value} archivos adjuntos',
'upload_images_suffix_tips' => 'La imagen {value} tiene un formato incorrecto',
'upload_video_suffix_tips' => 'El {value} formato de vídeo es incorrecto',
'upload_annex_suffix_tips' => 'El formato del anexo {value} es incorrecto',
'form_config_type_params_tips' => 'Configuración incorrecta del parámetro del formulario [tipo]',
'form_config_value_params_tips' => 'Configuración incorrecta del parámetro del formulario [tipo]',
'form_call_fun_not_exist_tips' => 'El método definido por el formulario no está definido',
@ -338,6 +341,7 @@ return [
'upd_time_title' => 'Tiempo de actualización',
'price_min_title' => 'Precio mínimo',
'price_max_title' => 'Precio máximo',
'shop_order' => 'Pedidos del centro comercial',
'back_home_title' => 'Volver a la página de inicio',
'shop_home_title' => 'Página de inicio del centro comercial',
'home_title' => 'Página de inicio',
@ -451,6 +455,7 @@ return [
'refuse_title' => 'Rechazar',
'pass_title' => 'Através',
'agree_title' => 'De acuerdo',
'expire_title' => 'Caducado',
'order_title' => 'Pedidos',
'install_title' => 'Instalación',
'uninstall_title' => 'Desinstalar',
@ -580,6 +585,7 @@ return [
'custom_title' => 'Personalizado',
'customer_title' => 'Cliente',
'customer_info_title' => 'Información del cliente',
'region_title' => 'Región',
// 商品基础相关
'goods_name' => 'Nombre de la mercancía',
'goods_add_name' => 'Adición de productos básicos',
@ -1163,6 +1169,23 @@ return [
3 => 'Precio',
4 => 'Último',
],
// 用户商品收藏排序类型
'common_goods_favor_order_by_type_list' => [
0 => 'Integral',
1 => 'Ventas',
2 => 'Calor',
3 => 'Precio',
4 => 'Último',
],
// 用户商品浏览排序类型
'common_goods_browse_order_by_type_list' => [
0 => 'Integral',
1 => 'Ventas',
2 => 'Calor',
3 => 'Precio',
4 => 'Último',
5 => 'Navegación del usuario',
],
// 数据排序规则
'common_data_order_by_rule_list' => [
0 => 'Orden descendente (desc)',
@ -1646,6 +1669,8 @@ return [
],
// 配置信息
'config' => [
'site_title_icon_power_tips' => 'El icono del título del navegador no tiene permisos',
'site_title_icon_fail_tips' => 'Falló la conservación del icono del título del navegador',
'route_dir_no_power_tips' => 'El catálogo de enrutamiento no tiene permisos operativos',
'route_file_no_power_tips' => 'El perfil de ruta no tiene permisos operativos',
'route_file_config_no_exist_tips' => 'El archivo de reglas de enrutamiento no existe',
@ -1731,7 +1756,7 @@ return [
'upload_config_file_error_tips' => 'La información de configuración está vacía o incorrecta',
'upload_config_file_handle_fail_tips' => 'Falló el procesamiento del archivo de configuración',
'upload_invalid_packet_tips' => 'Paquete de datos no válido',
'preview_url_tips' => 'Por favor, configure la dirección h5 del teléfono móvil en segundo plano [teléfono móvil - > configuración básica] primero (el lado h5 necesita ser empaquetado con la versión uniapp)',
'preview_url_tips' => 'Para el efecto de previsualización de h5, primero configure la dirección h5 del teléfono móvil en segundo plano [teléfono móvil - > configuración básica] (el lado h5 necesita ser empaquetado con la versión uniapp)',
'form_item_desc' => 'Descripción',
'form_item_desc_message' => 'Formato de contenido de descripción de 2 a 60 caracteres',
'form_item_apply_version' => 'Versión del sistema aplicable',
@ -1875,8 +1900,8 @@ return [
'form_item_brand_message' => 'Por favor, elija la marca',
'form_item_place_origin' => 'Lugar de producción',
'form_item_place_origin_message' => 'Por favor, elija el lugar de producción.',
'form_item_inventory_unit' => 'Unidades de inventario',
'form_item_inventory_unit_message' => 'Formato de la unidad de inventario de 1 a 6 caracteres',
'form_item_inventory_unit' => 'Unidad de medida',
'form_item_inventory_unit_message' => 'Formato de organización de inventario de 1 a 6 palabras',
'form_item_give_integral' => 'Proporción de puntos de regalo de compra',
'form_item_give_integral_tips' => [
'1. distribución de acuerdo con la proporción de la cantidad de la mercancía multiplicada por la proporción de la cantidad',
@ -2362,6 +2387,7 @@ return [
'pay_log_insert_fail_tips' => 'Falló la adición del pedido de pago',
'pay_log_id_empty_tips' => 'El ID de registro es incorrecto',
'pay_log_update_fail_tips' => 'Falló la actualización del pedido de registro',
'pay_log_value_no_data_tips' => 'No hay datos de Negocios de pago',
],
// 支付方式
'payment' => [
@ -3434,6 +3460,11 @@ return [
'desc' => 'Se recomienda usar el formato png, se recomienda 300*300px',
'tips' => 'Por favor, suba el logotipo cuadrado',
],
'home_site_title_icon' => [
'name' => 'Icono del título del navegador',
'desc' => 'Con el formato ico, se recomienda 128 * 128px',
'tips' => 'Por favor, suba el icono del título del navegador',
],
'home_user_reg_type' => [
'name' => 'Método de registro',
'desc' => 'No seleccionado, el sitio frontal no se podrá registrar, se puede elegir [sms, buzón, nombre de usuario]',
@ -3883,7 +3914,7 @@ return [
],
'home_is_enable_userregister_agreement' => [
'name' => 'Protocolo de registro de usuarios',
'desc' => 'Se cierra por defecto, y el registro del usuario requiere un Protocolo de consentimiento para registrarse después de abrirlo.',
'desc' => 'Se cierra por defecto. después de abrir, el registro del usuario requiere un Protocolo de consentimiento para registrarse. solo es válido para el lado Web.',
'tips' => 'Por favor, elija Si habilita el Protocolo de registro de usuarios',
],
'home_order_aftersale_return_goods_contacts_name' => [
@ -4054,16 +4085,17 @@ return [
],
'common_is_exhibition_mode_btn_text' => [
'name' => 'Nombre de la operación de exhibición',
'desc' => 'Consulta inmediata por defecto',
'desc' => 'Consulta inmediata por defecto, nombre de ocupación del botón [compra inmediata] de la página del producto en modo de exhibición',
'tips' => 'Por favor, rellene el nombre de la operación de exhibición.',
],
'common_site_fictitious_return_title' => [
'name' => 'Título de la información virtual',
'desc' => 'Información clave predeterminada',
'desc' => 'Información clave predeterminada, el título de la información virtual que el usuario muestra en los detalles del pedido después de comprar el producto virtual',
'tips' => 'Por favor, rellene el título de la información virtual',
],
'common_site_fictitious_return_tips' => [
'name' => 'Mensaje de recordatorio',
'desc' => 'Información de recordatorio que el usuario muestra al usuario en los detalles del pedido después de comprar el producto virtual',
'tips' => 'Por favor, rellene la información de recordatorio.',
],
'common_app_mini_alipay_tnt_inst_id' => [
@ -4109,7 +4141,7 @@ return [
],
'common_is_mobile_concise_model' => [
'name' => 'Modo simple del teléfono móvil',
'desc' => 'Predeterminado No',
'desc' => 'No por defecto, después de abrir, el menú inferior del lado web y el enlace de amistad no se muestran',
'tips' => 'Por favor, elija si el teléfono es simple.',
],
'common_app_weixin_liveplayer' => [
@ -4320,9 +4352,9 @@ return [
'desc' => 'Verify Code variable identifier (...)',
],
'home_extraction_address_position' => [
'name' => 'Recoger y elegir la ubicación geográfica',
'desc' => 'Cierre predeterminado',
'tips' => 'Por favor, elija recoger para elegir la ubicación geográfica.',
'name' => 'Haga un pedido y elija su ubicación geográfica.',
'desc' => 'Se cierra por defecto. después de abrir, debe seleccionar la ubicación actual y la dirección del usuario para mostrarla más recientemente antes de hacer un pedido y seleccionar la dirección de recogida.',
'tips' => 'Por favor, elija hacer un pedido y recoger su propia ubicación geográfica.',
],
'home_search_is_keywords_where_and' => [
'name' => 'Buscar varias palabras clave y relaciones',
@ -4549,12 +4581,12 @@ return [
],
'common_buy_datetime_info' => [
'name' => 'Hora especificada para hacer el pedido',
'desc' => '',
'desc' => 'Solo es válido en la misma ciudad y en el modo de autopedido.',
'tips' => 'Por favor, elija la hora especificada para hacer el pedido.',
],
'common_buy_extraction_contact_info' => [
'name' => 'Información de contacto para hacer un pedido',
'desc' => '',
'desc' => 'Solo válido en el modo de pedido de recogida propia',
'tips' => 'Por favor, elija la información de contacto para hacer un pedido.',
],
'home_search_history_record' => [

View File

@ -76,6 +76,9 @@ return [
'upload_images_max_tips' => '最多上传{value}张图片',
'upload_video_max_tips' => '最多上传{value}个视频',
'upload_annex_max_tips' => '最多上传{value}个附件',
'upload_images_suffix_tips' => '第{value}张图片格式有误',
'upload_video_suffix_tips' => '第{value}个视频格式有误',
'upload_annex_suffix_tips' => '第{value}个附件格式有误',
'form_config_type_params_tips' => '表单[类型]参数配置有误',
'form_config_value_params_tips' => '表单[类型]参数配置有误',
'form_call_fun_not_exist_tips' => '表单定义的方法未定义',
@ -339,6 +342,7 @@ return [
'upd_time_title' => '更新时间',
'price_min_title' => '最低价格',
'price_max_title' => '最高价格',
'shop_order' => '商城订单',
'back_home_title' => '回到首页',
'shop_home_title' => '商城首页',
'home_title' => '首页',
@ -452,6 +456,7 @@ return [
'refuse_title' => '拒绝',
'pass_title' => '通过',
'agree_title' => '同意',
'expire_title' => '过期',
'order_title' => '订单',
'install_title' => '安装',
'uninstall_title' => '卸载',
@ -581,6 +586,7 @@ return [
'custom_title' => '自定义',
'customer_title' => '客户',
'customer_info_title' => '客户信息',
'region_title' => '地区',
// 商品基础相关
'goods_name' => '商品名称',
'goods_add_name' => '商品添加',
@ -1164,6 +1170,23 @@ return [
3 => '价格',
4 => '最新',
],
// 用户商品收藏排序类型
'common_goods_favor_order_by_type_list' => [
0 => '综合',
1 => '销量',
2 => '热度',
3 => '价格',
4 => '最新',
],
// 用户商品浏览排序类型
'common_goods_browse_order_by_type_list' => [
0 => '综合',
1 => '销量',
2 => '热度',
3 => '价格',
4 => '最新',
5 => '用户浏览',
],
// 数据排序规则
'common_data_order_by_rule_list' => [
0 => '降序(desc)',
@ -1648,6 +1671,8 @@ return [
],
// 配置信息
'config' => [
'site_title_icon_power_tips' => '浏览器标题图标无权限',
'site_title_icon_fail_tips' => '浏览器标题图标保存失败',
'route_dir_no_power_tips' => '路由目录没有操作权限',
'route_file_no_power_tips' => '路由配置文件没有操作权限',
'route_file_config_no_exist_tips' => '路由规则文件不存在',
@ -1733,7 +1758,7 @@ return [
'upload_config_file_error_tips' => '配置信息为空或有误',
'upload_config_file_handle_fail_tips' => '配置文件处理失败',
'upload_invalid_packet_tips' => '无效数据包',
'preview_url_tips' => '请在后台[ 手机->基础配置 ]先配置手机端h5地址h5端需要使用uniapp版本打包',
'preview_url_tips' => '如需h5预览效果请在后台[ 手机->基础配置 ]先配置手机端h5地址h5端需要使用uniapp版本打包',
'form_item_desc' => '描述',
'form_item_desc_message' => '描述内容格式2~60个字符',
'form_item_apply_version' => '适用系统版本',
@ -1877,8 +1902,8 @@ return [
'form_item_brand_message' => '请选择品牌',
'form_item_place_origin' => '生产地',
'form_item_place_origin_message' => '请选择生产地',
'form_item_inventory_unit' => '库存单位',
'form_item_inventory_unit_message' => '库存单位格式1~6个字符',
'form_item_inventory_unit' => '计量单位',
'form_item_inventory_unit_message' => '计量单位格式1~6个字符',
'form_item_give_integral' => '购买赠送积分比例',
'form_item_give_integral_tips' => [
'1. 按照商品金额比例乘以数量的比例进行发放',
@ -2364,6 +2389,7 @@ return [
'pay_log_insert_fail_tips' => '支付订单添加失败',
'pay_log_id_empty_tips' => '日志id有误',
'pay_log_update_fail_tips' => '日志订单更新失败',
'pay_log_value_no_data_tips' => '无支付业务数据',
],
// 支付方式
'payment' => [
@ -3463,6 +3489,11 @@ return [
'desc' => '使用png格式建议300*300px',
'tips' => '请上传正方形logo',
],
'home_site_title_icon' => [
'name' => '浏览器标题图标',
'desc' => '使用ico格式建议128*128px',
'tips' => '请上传浏览器标题图标',
],
'home_user_reg_type' => [
'name' => '注册方式',
'desc' => '未选择、前端站点将无法注册,可选择 [ 短信, 邮箱, 用户名 ]',
@ -3912,7 +3943,7 @@ return [
],
'home_is_enable_userregister_agreement' => [
'name' => '用户注册协议',
'desc' => '默认关闭,开启后用户注册需要同意协议才可以注册',
'desc' => '默认关闭,开启后用户注册需要同意协议才可以注册仅对web端有效',
'tips' => '请选择是否启用用户注册协议',
],
'home_order_aftersale_return_goods_contacts_name' => [
@ -4083,16 +4114,17 @@ return [
],
'common_is_exhibition_mode_btn_text' => [
'name' => '展示型操作名称',
'desc' => '默认 立即咨询',
'desc' => '默认 立即咨询,展示模式下商品页面的【立即购买】按钮占位名称',
'tips' => '请填写展示型操作名称',
],
'common_site_fictitious_return_title' => [
'name' => '虚拟信息标题',
'desc' => '默认密钥信息',
'desc' => '默认 密钥信息,用户购买虚拟商品后、在订单详情里面展示虚拟信息的标题',
'tips' => '请填写虚拟信息标题',
],
'common_site_fictitious_return_tips' => [
'name' => '提示信息',
'desc' => '用户购买虚拟商品后、在订单详情里面展示给用户的提示信息',
'tips' => '请填写提示信息',
],
'common_app_mini_alipay_tnt_inst_id' => [
@ -4138,7 +4170,7 @@ return [
],
'common_is_mobile_concise_model' => [
'name' => '手机简洁模式',
'desc' => '默认否',
'desc' => '默认否开启后web端底部菜单、友情链接不显示',
'tips' => '请选择是否手机简洁模式',
],
'common_app_weixin_liveplayer' => [
@ -4349,9 +4381,9 @@ return [
'desc' => '验证码变量标识符 [ #code# ]',
],
'home_extraction_address_position' => [
'name' => '自提选择地理位置',
'desc' => '默认关闭',
'tips' => '请选择自提选择地理位置',
'name' => '下单自提选择地理位置',
'desc' => '默认关闭,开启后下单选择自提地址之前需要先选择用户当前位置、地址以最近展示',
'tips' => '请选择下单自提选择地理位置',
],
'home_search_is_keywords_where_and' => [
'name' => '搜索多个关键字并且关系',
@ -4578,12 +4610,12 @@ return [
],
'common_buy_datetime_info' => [
'name' => '下单指定时间',
'desc' => '',
'desc' => '仅同城、自提订单模式下有效',
'tips' => '请选择下单指定时间',
],
'common_buy_extraction_contact_info' => [
'name' => '下单联系信息',
'desc' => '',
'desc' => '仅自提订单模式下有效',
'tips' => '请选择下单联系信息',
],
'home_search_history_record' => [

View File

@ -18,6 +18,8 @@ use app\service\DiyApiService;
use app\service\UserService;
use app\service\MessageService;
use app\service\GoodsCartService;
use app\service\GoodsFavorService;
use app\service\GoodsBrowseService;
/**
* DIY装修处理服务层
@ -341,6 +343,25 @@ class DiyModule
}
break;
// 商品魔方
case 'goods-magic' :
if(!empty($v['com_data']['content']['data_source']) && !empty($v['com_data']['content']['data_source_content']) && isset($v['com_data']['content']['data_source_content']['data_type']) && $v['com_data']['content']['data_source_content']['data_type'] == 1)
{
switch($v['com_data']['content']['data_source'])
{
// 用户商品收藏
case 'user-goods-favor' :
$v['com_data']['content']['data_source_content']['data_auto_list'] = GoodsFavorService::AutoGoodsFavorList($v['com_data']['content']['data_source_content']);
break;
// 用户商品浏览
case 'user-goods-browse' :
$v['com_data']['content']['data_source_content']['data_auto_list'] = GoodsBrowseService::AutoGoodsBrowseList($v['com_data']['content']['data_source_content']);
break;
}
}
break;
// 文章列表
case 'article-list' :
$v['com_data']['content'] = self::ConfigViewArticleHandle($v['com_data']['content'], $article_data);
@ -409,11 +430,7 @@ class DiyModule
// 固定数据、用户信息
if($tabs_data_config['content']['data_source'] == 'user-info')
{
$ret = DiyApiService::UserHeadData();
$ret['data']['user_avatar'] = empty($ret['data']['user']) ? UserDefaultAvatar() : $ret['data']['user']['avatar'];
$ret['data']['user_name_view'] = empty($ret['data']['user']) ? '用户名称' : $ret['data']['user']['user_name_view'];
unset($ret['data']['user']);
$tabs_data_config['content']['data_source_content']['data_list'][] = $ret['data'];
$tabs_data_config['content']['data_source_content']['data_list'][] = self::UserHeadDataHandle();
}
}
break;
@ -476,11 +493,7 @@ class DiyModule
// 固定数据、用户信息
if($dmv['data_content']['data_source'] == 'user-info')
{
$ret = DiyApiService::UserHeadData();
$ret['data']['user_avatar'] = empty($ret['data']['user']) ? UserDefaultAvatar() : $ret['data']['user']['avatar'];
$ret['data']['user_name_view'] = empty($ret['data']['user']) ? '用户名称' : $ret['data']['user']['user_name_view'];
unset($ret['data']['user']);
$dmv['data_content']['data_source_content']['data_list'][] = $ret['data'];
$dmv['data_content']['data_source_content']['data_list'][] = self::UserHeadDataHandle();
}
}
break;
@ -519,11 +532,7 @@ class DiyModule
// 固定数据、用户信息
if($v['com_data']['content']['data_source'] == 'user-info')
{
$ret = DiyApiService::UserHeadData();
$ret['data']['user_avatar'] = empty($ret['data']['user']) ? UserDefaultAvatar() : $ret['data']['user']['avatar'];
$ret['data']['user_name_view'] = empty($ret['data']['user']) ? '用户名称' : $ret['data']['user']['user_name_view'];
unset($ret['data']['user']);
$v['com_data']['content']['data_source_content']['data_list'][] = $ret['data'];
$v['com_data']['content']['data_source_content']['data_list'][] = self::UserHeadDataHandle();
}
}
break;
@ -532,9 +541,7 @@ class DiyModule
case 'user-info' :
if(!empty($v['com_data']['content']))
{
$business_type = empty($v['com_data']['content']['config']) ? [] : $v['com_data']['content']['config'];
$ret = DiyApiService::UserHeadData();
$v['com_data']['content']['data'] = $ret['data'];
$v['com_data']['content']['data'] = self::UserHeadDataHandle();
}
break;
}
@ -568,6 +575,20 @@ class DiyModule
return $config;
}
/**
* 用户头信息处理
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2025-03-25
* @desc description
*/
public static function UserHeadDataHandle()
{
$ret = DiyApiService::UserHeadData();
return $ret['data'];
}
/**
* 有效时间验证
* @author Devil

View File

@ -5,8 +5,8 @@
<link rel="shortcut icon" type="image/x-icon" href="{{$public_host}}favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{:MyLang('common_service.diy.base_nav_title')}}</title>
<script type="module" crossorigin src="{{$public_host}}static/diy/js/entry/index-299c6bce.js"></script>
<link rel="stylesheet" href="{{$public_host}}static/diy/css/index-47987fe1.css">
<script type="module" crossorigin src="{{$public_host}}static/diy/js/entry/index-c834ac63.js"></script>
<link rel="stylesheet" href="{{$public_host}}static/diy/css/index-011987cc.css">
</head>
<body>
<div id="app"></div>

View File

@ -21,7 +21,7 @@
{{/php}}
<!-- content start -->
<div class="am-form-table-data-container am-form-table-data-detail am-min-height bk-am-color-white {{if isset($form_table['base']['is_detail_nav_operate']) and $form_table['base']['is_detail_nav_operate'] eq 1}}form-table-navigation-present-operate{{/if}}">
<div class="am-form-table-data-container am-form-table-data-detail am-min-height am-background-white {{if isset($form_table['base']['is_detail_nav_operate']) and $form_table['base']['is_detail_nav_operate'] eq 1}}form-table-navigation-present-operate{{/if}}">
<!-- content inside top hook -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}}
<div class="plugins-tag">

View File

@ -1,7 +1,7 @@
{{if !empty($goods_category_list)}}
{{if !empty($module_data)}}
<div class="goods-category-choice-content am-nbfc am-padding-lg">
<ul class="goods-category-select-1 am-scrollable-vertical am-list am-list-border am-fl am-radius" data-level="1">
{{foreach $goods_category_list as $k=>$v}}
{{foreach $module_data as $k=>$v}}
<li>
<a href="javascript:;" data-index="{{$k}}" data-value="{{$v.id}}">
<span class="data-name">{{$v.name}}</span>

View File

@ -9,7 +9,7 @@
<form class="am-form am-form-popup-fixed">
<div class="layout-category-choice">
<div class="goods-category-choice am-padding-sm form-container-category">
{{:ModuleInclude('../../../module/view/layout/public/common/goods_category_choice')}}
{{:ModuleInclude('../../../module/view/layout/public/common/goods_category_choice', $goods_category_list)}}
</div>
</div>

View File

@ -18,7 +18,7 @@
<div data-tab-panel-0 class="am-tab-panel am-padding-0 am-active">
<div class="layout-category-choice">
<div class="goods-category-choice am-padding-sm form-container-category">
{{:ModuleInclude('../../../module/view/layout/public/common/goods_category_choice')}}
{{:ModuleInclude('../../../module/view/layout/public/common/goods_category_choice', $goods_category_list)}}
</div>
</div>
</div>

View File

@ -122,10 +122,10 @@ class AppMiniUserService
if($ret['code'] == 0)
{
// 先从数据库获取用户信息
$user = self::UserOpenOrUnionidData('alipay_openid', $ret['data']['user_id']);
$user = self::UserOpenOrUnionidData('alipay_openid', $ret['data']['open_id']);
if(empty($user))
{
$ret = DataReturn(MyLang('common_service.appminiuser.auth_login_success_tips'), 0, ['is_user_exist'=>0, 'openid'=>$ret['data']['user_id']]);
$ret = DataReturn(MyLang('common_service.appminiuser.auth_login_success_tips'), 0, ['is_user_exist'=>0, 'openid'=>$ret['data']['open_id']]);
} else {
// 用户状态
$ret = UserService::UserStatusCheck($user['id']);

View File

@ -305,7 +305,7 @@ class ArticleService
$attachment = ResourcesService::AttachmentParams($params, ['cover', 'share_images']);
// 编辑器内容
$content = empty($params['content']) ? '' : ResourcesService::ContentStaticReplace(htmlspecialchars_decode($params['content']), 'add');
$content = empty($params['content']) ? '' : str_replace("\n", '', ResourcesService::ContentStaticReplace(htmlspecialchars_decode($params['content']), 'add'));
// 详情图片
$images = ResourcesService::RichTextMatchContentAttachment($content, 'article', 'images');

View File

@ -69,6 +69,7 @@ class ConfigService
'home_site_logo_wap',
'home_site_logo_app',
'home_site_logo_square',
'home_site_title_icon',
'common_customer_store_qrcode',
'home_site_user_register_bg_images',
'home_site_user_login_ad1_images',
@ -310,6 +311,13 @@ class ConfigService
return $ret;
}
// 浏览器图标
$ret = self::SiteTitleIconHandle($params);
if($ret['code'] != 0)
{
return $ret;
}
// 站点默认首页配置
$ret = self::SiteDefaultIndexHandle($params);
if($ret['code'] != 0)
@ -524,6 +532,36 @@ class ConfigService
return DataReturn(MyLang('handle_noneed'), 0);
}
/**
* 浏览器图标处理
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-01-02T23:08:19+0800
* @param [array] $params [输入参数]
*/
public static function SiteTitleIconHandle($params = [])
{
if(!empty($params['home_site_title_icon']))
{
$file = RequestGet($params['home_site_title_icon']);
if(!empty($file))
{
$ico_file = ROOT.'public'.DS.'favicon.ico';
if(!is_writable($ico_file))
{
return DataReturn(MyLang('common_service.config.site_title_icon_power_tips').'['.$ico_file.']', -1);
}
if(file_put_contents($ico_file, $file) === false)
{
return DataReturn(MyLang('common_service.config.site_title_icon_fail_tips').'['.$ico_file.']', -1);
}
return DataReturn(MyLang('handle_success'), 0);
}
}
return DataReturn(MyLang('handle_noneed'), 0);
}
/**
* 路由规则处理
* @author Devil

View File

@ -142,6 +142,7 @@ class ConstService
'6.3.0' => ['value' => '6.3.0', 'name' => 'v6.3.0'],
'6.4.0' => ['value' => '6.4.0', 'name' => 'v6.4.0'],
'6.5.0' => ['value' => '6.5.0', 'name' => 'v6.5.0'],
'6.6.0' => ['value' => '6.6.0', 'name' => 'v6.6.0'],
],
// 搜索排序方式
@ -360,7 +361,7 @@ class ConstService
],
// 站点类型
'common_site_type_list' => [
0 => ['value' => 0, 'name' => MyLang('common_site_type_list.0')],
0 => ['value' => 0, 'name' => MyLang('common_site_type_list.0'), 'checked'=>true],
1 => ['value' => 1, 'name' => MyLang('common_site_type_list.1')],
2 => ['value' => 2, 'name' => MyLang('common_site_type_list.2')],
3 => ['value' => 3, 'name' => MyLang('common_site_type_list.3')],
@ -425,6 +426,23 @@ class ConstService
3 => ['index' => 3, 'value' => 'g.min_price', 'name' => MyLang('common_goods_order_by_type_list.3')],
4 => ['index' => 4, 'value' => 'g.id', 'name' => MyLang('common_goods_order_by_type_list.4')],
],
// 用户商品收藏排序类型
'common_goods_favor_order_by_type_list' => [
0 => ['index' => 0, 'value' => 'g.access_count,g.sales_count,f.id', 'name' => MyLang('common_goods_favor_order_by_type_list.0'), 'checked' => true],
1 => ['index' => 1, 'value' => 'g.sales_count', 'name' => MyLang('common_goods_favor_order_by_type_list.1')],
2 => ['index' => 2, 'value' => 'g.access_count', 'name' => MyLang('common_goods_favor_order_by_type_list.2')],
3 => ['index' => 3, 'value' => 'g.min_price', 'name' => MyLang('common_goods_favor_order_by_type_list.3')],
4 => ['index' => 4, 'value' => 'f.id', 'name' => MyLang('common_goods_favor_order_by_type_list.4')],
],
// 用户商品浏览排序类型
'common_goods_browse_order_by_type_list' => [
0 => ['index' => 0, 'value' => 'b.access_count,g.access_count,g.sales_count,b.id', 'name' => MyLang('common_goods_browse_order_by_type_list.0'), 'checked' => true],
1 => ['index' => 1, 'value' => 'g.sales_count', 'name' => MyLang('common_goods_browse_order_by_type_list.1')],
2 => ['index' => 2, 'value' => 'g.access_count', 'name' => MyLang('common_goods_browse_order_by_type_list.2')],
3 => ['index' => 3, 'value' => 'g.min_price', 'name' => MyLang('common_goods_browse_order_by_type_list.3')],
4 => ['index' => 4, 'value' => 'b.id', 'name' => MyLang('common_goods_browse_order_by_type_list.4')],
5 => ['index' => 5, 'value' => 'b.access_count', 'name' => MyLang('common_goods_browse_order_by_type_list.5')],
],
// 数据排序规则
'common_data_order_by_rule_list' => [
0 => ['index' => 0, 'value' => 'desc', 'name' => MyLang('common_data_order_by_rule_list.0'), 'checked' => true],

View File

@ -24,6 +24,7 @@ use app\service\GoodsService;
use app\service\UserService;
use app\service\OrderService;
use app\service\GoodsFavorService;
use app\service\GoodsBrowseService;
use app\service\MessageService;
use app\service\IntegralService;
use app\service\DiyService;
@ -167,6 +168,7 @@ class DiyApiService
['key' => 'article-tabs', 'name' => '文章选项卡'],
['key' => 'goods-list', 'name' => '商品列表'],
['key' => 'goods-tabs', 'name' => '商品选项卡'],
['key' => 'goods-magic', 'name' => '商品魔方'],
['key' => 'img-magic', 'name' => '图片魔方'],
['key' => 'data-magic', 'name' => '数据魔方'],
['key' => 'data-tabs', 'name' => '数据选项卡'],
@ -854,12 +856,14 @@ class DiyApiService
*/
public static function UserHeadData($params = [])
{
static $diy_user_info_data = null;
if($diy_user_info_data === null)
static $diyapi_user_info_data = null;
if($diyapi_user_info_data === null)
{
$user = UserService::LoginUserInfo();
$diy_user_info_data = [
'user' => $user,
$data = [
'user_avatar' => empty($user) ? UserDefaultAvatar() : $user['avatar'],
'user_name_view' => empty($user) ? '用户名称' : $user['user_name_view'],
'user_number_code' => empty($user) ? '' : $user['number_code'],
'order_count' => 0,
'goods_favor_count' => 0,
'goods_browse_count' => 0,
@ -874,30 +878,73 @@ class DiyApiService
];
// 订单总数
$diy_user_info_data['order_count'] = OrderService::OrderTotal(array_merge($base_where, [
$data['order_count'] = OrderService::OrderTotal(array_merge($base_where, [
['is_delete_time', '=', 0],
['user_is_delete_time', '=', 0],
]));
// 商品收藏总数
$diy_user_info_data['goods_favor_count'] = GoodsFavorService::GoodsFavorTotal($base_where);
$data['goods_favor_count'] = GoodsFavorService::GoodsFavorTotal($base_where);
// 商品浏览总数
$diy_user_info_data['goods_browse_count'] = GoodsBrowseService::GoodsBrowseTotal($base_where);
$data['goods_browse_count'] = GoodsBrowseService::GoodsBrowseTotal($base_where);
// 用户积分
$integral = IntegralService::UserIntegral($user['id']);
$diy_user_info_data['integral_number'] = (!empty($integral) && !empty($integral['integral'])) ? $integral['integral'] : 0;
$data['integral_number'] = (!empty($integral) && !empty($integral['integral'])) ? $integral['integral'] : 0;
// 未读消息总数
$diy_user_info_data['message_unread_count'] = MessageService::UserMessageTotal([
$data['message_unread_count'] = MessageService::UserMessageTotal([
'user' => $user,
'is_more' => 1,
'is_read' => 0,
]);
}
// diy用户头数据钩子
$hook_name = 'plugins_service_diyapi_user_head_data';
MyEventTrigger($hook_name, [
'hook_name' => $hook_name,
'is_backend' => true,
'data' => &$data,
'user' => $user,
'params' => $params,
]);
// 赋值常亮变量
$diyapi_user_info_data = $data;
}
return DataReturn('success', 0, $diy_user_info_data);
return DataReturn('success', 0, $diyapi_user_info_data);
}
/**
* 商品收藏自动数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-19
* @desc description
* @param [array] $params [输入参数]
*/
public static function GoodsFavorAutoData($params = [])
{
$result = GoodsFavorService::AutoGoodsFavorList($params);
return DataReturn('success', 0, $result);
}
/**
* 商品浏览自动数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-19
* @desc description
* @param [array] $params [输入参数]
*/
public static function GoodsBrowseAutoData($params = [])
{
$result = GoodsBrowseService::AutoGoodsBrowseList($params);
return DataReturn('success', 0, $result);
}
/**
@ -921,6 +968,7 @@ class DiyApiService
'appoint_data' => [
'user_avatar' => UserDefaultAvatar(),
'user_name_view' => '用户名称',
'user_number_code' => '用户会员码',
'order_count' => 0,
'goods_favor_count' => 0,
'goods_browse_count' => 0,
@ -930,6 +978,7 @@ class DiyApiService
'data' => [
['name'=>'用户头像', 'field'=>'user_avatar', 'type'=>'images'],
['name'=>'用户名称', 'field'=>'user_name_view', 'type'=>'text'],
['name'=>'用户会员码', 'field'=>'user_number_code', 'type'=>'text'],
['name'=>'订单总数', 'field'=>'order_count', 'type'=>'text'],
['name'=>'商品收藏', 'field'=>'goods_favor_count', 'type'=>'text'],
['name'=>'我的足迹', 'field'=>'goods_browse_count', 'type'=>'text'],
@ -949,9 +998,10 @@ class DiyApiService
['name'=>'简述', 'field' =>'simple_desc', 'type'=>'text'],
['name'=>'型号', 'field' =>'model', 'type'=>'text'],
['name'=>'品牌', 'field' =>'brand_name', 'type'=>'text'],
['name'=>'品牌商品URL', 'field' =>'brand_goods_url', 'type'=>'link'],
['name'=>'生产地', 'field' =>'place_origin_name', 'type'=>'text'],
['name'=>'库存', 'field' =>'inventory', 'type'=>'text'],
['name'=>'库存单位', 'field' =>'inventory_unit', 'type'=>'text'],
['name'=>'计量单位', 'field' =>'inventory_unit', 'type'=>'text'],
['name'=>'封面图片', 'field' =>'images', 'type'=>'images'],
['name'=>'原价', 'field' =>'original_price', 'type'=>'text'],
['name'=>'最低原价', 'field' =>'min_original_price', 'type'=>'text'],
@ -1367,5 +1417,140 @@ class DiyApiService
]);
return DataReturn('success', 0, $data);
}
/**
* 商品魔方初始化
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-19
* @desc description
* @param [array] $params [输入参数]
*/
public static function GoodsMagicInit($params = [])
{
// 返回数据
$data = [
// 数据源
'data_source' => [
[
'name' => '用户商品收藏',
'type' => 'user-goods-favor',
'custom_config' => [
'data_type' => [1],
'is_type_show' => 0,
'filter_config' => [
'data_url' => MyUrl('admin/diyapi/goodsfavorautodata'),
'filter_form_config' => [
[
'type' => 'input',
'config' => [
'placeholder' => '请输入关键字',
'type' => 'text',
],
'title' => '关键字',
'form_name' => 'goods_keywords',
],
[
'type' => 'input',
'config' => [
'default' => 4,
'type' => 'number',
],
'title' => '显示数量',
'form_name' => 'goods_number',
],
[
'type' => 'radio',
'title' => '排序类型',
'form_name' => 'goods_order_by_type',
'data' => MyConst('common_goods_favor_order_by_type_list'),
'data_key' => 'index',
'data_name' => 'name',
'config' => [
'default' => 0,
]
],
[
'type' => 'radio',
'title' => '排序规则',
'form_name' => 'goods_order_by_rule',
'data' => MyConst('common_data_order_by_rule_list'),
'data_key' => 'index',
'data_name' => 'name',
'config' => [
'default' => 0,
]
],
],
],
],
],
[
'name' => '用户商品浏览',
'type' => 'user-goods-browse',
'custom_config' => [
'data_type' => [1],
'is_type_show' => 0,
'filter_config' => [
'data_url' => MyUrl('admin/diyapi/goodsbrowseautodata'),
'filter_form_config' => [
[
'type' => 'input',
'config' => [
'placeholder' => '请输入关键字',
'type' => 'text',
],
'title' => '关键字',
'form_name' => 'goods_keywords',
],
[
'type' => 'input',
'config' => [
'default' => 4,
'type' => 'number',
],
'title' => '显示数量',
'form_name' => 'goods_number',
],
[
'type' => 'radio',
'title' => '排序类型',
'form_name' => 'goods_order_by_type',
'data' => MyConst('common_goods_browse_order_by_type_list'),
'data_key' => 'index',
'data_name' => 'name',
'config' => [
'default' => 0,
]
],
[
'type' => 'radio',
'title' => '排序规则',
'form_name' => 'goods_order_by_rule',
'data' => MyConst('common_data_order_by_rule_list'),
'data_key' => 'index',
'data_name' => 'name',
'config' => [
'default' => 0,
]
],
],
],
],
],
],
];
// diy商品魔方初始化钩子
$hook_name = 'plugins_service_diyapi_goods_magic_init';
MyEventTrigger($hook_name, [
'hook_name' => $hook_name,
'is_backend' => true,
'data' => &$data,
'params' => $params,
]);
return DataReturn('success', 0, $data);
}
}
?>

View File

@ -924,6 +924,11 @@ class DiyService
// 地址信息
$page = 'pages/diy/diy';
$query = 'id='.$data['id'];
// h5地址拼接
if(!empty($h5_url))
{
$h5_url .= $page.'?'.$query;
}
foreach($platform as $v)
{
// 存储信息
@ -944,7 +949,7 @@ class DiyService
case 'h5' :
if(!empty($h5_url))
{
$ret = (new \base\Qrcode())->Create(array_merge($dir_params, ['content'=>$h5_url.$page.'?'.$query]));
$ret = (new \base\Qrcode())->Create(array_merge($dir_params, ['content'=>$h5_url]));
if($ret['code'] == 0)
{
$status = true;
@ -1076,12 +1081,15 @@ class DiyService
}
if($status)
{
$qrcode[] = [
'name' => $v['name'],
'type' => $v['value'],
'url' => ($v['value'] == 'h5') ? $h5_url .= $page.'?'.$query : '',
'qrcode' => ResourcesService::AttachmentPathViewHandle($dir_params['path'].$dir_params['filename']),
];
if(($v['value'] == 'h5' && !empty($h5_url)) || $v['value'] != 'h5')
{
$qrcode[] = [
'name' => $v['name'],
'type' => $v['value'],
'url' => ($v['value'] == 'h5') ? $h5_url : '',
'qrcode' => ResourcesService::AttachmentPathViewHandle($dir_params['path'].$dir_params['filename']),
];
}
}
}
}

View File

@ -57,16 +57,17 @@ class GoodsBrowseService
$where = ['goods_id'=>intval($params['goods_id']), 'user_id'=>$params['user']['id']];
$temp = Db::name('GoodsBrowse')->where($where)->find();
$data = [
'goods_id' => intval($params['goods_id']),
'user_id' => $params['user']['id'],
];
if(empty($temp))
{
$data['access_count'] = 1;
$data['add_time'] = time();
$status = Db::name('GoodsBrowse')->insertGetId($data) > 0;
} else {
$data['access_count'] = $temp['access_count']+1;
$data['upd_time'] = time();
$status = Db::name('GoodsBrowse')->where($where)->update($data) !== false;
}
@ -225,5 +226,56 @@ class GoodsBrowseService
}
return DataReturn(MyLang('delete_fail'), -100);
}
/**
* 自动读取商品浏览列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-09-29
* @desc description
* @param [array] $params [输入参数]
*/
public static function AutoGoodsBrowseList($params = [])
{
$data = [];
$user = UserService::LoginUserInfo();
if(!empty($user))
{
// 基础条件
$where = [
['g.is_delete_time', '=', 0],
['g.is_shelves', '=', 1],
['b.user_id', '=', $user['id']],
];
// 商品关键字
if(!empty($params['goods_keywords']))
{
$where[] = ['g.title|g.simple_desc', 'like', '%'.$params['goods_keywords'].'%'];
}
// 排序
$order_by_type_list = MyConst('common_goods_browse_order_by_type_list');
$order_by_rule_list = MyConst('common_data_order_by_rule_list');
// 排序类型
$order_by_type = !isset($params['goods_order_by_type']) || !array_key_exists($params['goods_order_by_type'], $order_by_type_list) ? $order_by_type_list[0]['value'] : $order_by_type_list[$params['goods_order_by_type']]['value'];
// 排序值
$order_by_rule = !isset($params['goods_order_by_rule']) || !array_key_exists($params['goods_order_by_rule'], $order_by_rule_list) ? $order_by_rule_list[0]['value'] : $order_by_rule_list[$params['goods_order_by_rule']]['value'];
// 拼接排序
$order_by = $order_by_type.' '.$order_by_rule;
// 获取数据
$ret = self::GoodsBrowseList([
'where' => $where,
'm' => 0,
'n' => empty($params['goods_number']) ? 10 : intval($params['goods_number']),
'order_by' => $order_by,
'field' => 'g.*,b.id,b.goods_id',
]);
$data = empty($ret['data']) ? [] : $ret['data'];
}
return $data;
}
}
?>

View File

@ -92,11 +92,11 @@ class GoodsCartService
return (isset($spec['type']) && isset($spec['value'])) ? $spec['type'].':'.$spec['value'] : '';
}, $v['spec'])));
// 获取商品基础信息
// 获取商品基础信息、如果有请求参数指定数量则使用指定的数量
$spec_params = array_merge($params, [
'id' => $v['goods_id'],
'spec' => $v['spec'],
'stock' => $v['stock'],
'stock' => empty($params['stock']) ? $v['stock'] : intval($params['stock']),
]);
$goods_base = GoodsService::GoodsSpecDetail($spec_params);
$v['is_invalid'] = 0;
@ -104,7 +104,7 @@ class GoodsCartService
{
$v['inventory'] = $goods_base['data']['spec_base']['inventory'];
$v['price'] = $goods_base['data']['spec_base']['price'];
$v['total_price'] = PriceNumberFormat($v['stock']* $v['price']);
$v['total_price'] = PriceNumberFormat($v['stock']*floatval($v['price']));
$v['original_price'] = $goods_base['data']['spec_base']['original_price'];
$v['spec_base_id'] = $goods_base['data']['spec_base']['id'];
$v['spec_buy_min_number'] = $goods_base['data']['spec_base']['buy_min_number'];

View File

@ -333,5 +333,56 @@ class GoodsFavorService
}
return DataReturn(MyLang('delete_fail'), -100);
}
/**
* 自动读取商品收藏列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-09-29
* @desc description
* @param [array] $params [输入参数]
*/
public static function AutoGoodsFavorList($params = [])
{
$data = [];
$user = UserService::LoginUserInfo();
if(!empty($user))
{
// 基础条件
$where = [
['g.is_delete_time', '=', 0],
['g.is_shelves', '=', 1],
['f.user_id', '=', $user['id']],
];
// 商品关键字
if(!empty($params['goods_keywords']))
{
$where[] = ['g.title|g.simple_desc', 'like', '%'.$params['goods_keywords'].'%'];
}
// 排序
$order_by_type_list = MyConst('common_goods_favor_order_by_type_list');
$order_by_rule_list = MyConst('common_data_order_by_rule_list');
// 排序类型
$order_by_type = !isset($params['goods_order_by_type']) || !array_key_exists($params['goods_order_by_type'], $order_by_type_list) ? $order_by_type_list[0]['value'] : $order_by_type_list[$params['goods_order_by_type']]['value'];
// 排序值
$order_by_rule = !isset($params['goods_order_by_rule']) || !array_key_exists($params['goods_order_by_rule'], $order_by_rule_list) ? $order_by_rule_list[0]['value'] : $order_by_rule_list[$params['goods_order_by_rule']]['value'];
// 拼接排序
$order_by = $order_by_type.' '.$order_by_rule;
// 获取数据
$ret = self::GoodsFavorList([
'where' => $where,
'm' => 0,
'n' => empty($params['goods_number']) ? 10 : intval($params['goods_number']),
'order_by' => $order_by,
'field' => 'g.*,f.id,f.goods_id',
]);
$data = empty($ret['data']) ? [] : $ret['data'];
}
return $data;
}
}
?>

View File

@ -48,7 +48,7 @@ class GoodsParamsService
return DataReturn($ret, -1);
}
// 获取分类所有分类id
// 获取分类所有分类上级id
$data = [];
$ids = GoodsCategoryService::GoodsCategoryParentIds($params['category_ids']);
if(!empty($ids))

View File

@ -424,7 +424,7 @@ class GoodsService
// 数据主键id
$data_id = isset($v[$data_key_field]) ? $v[$data_key_field] : 0;
// 当前库存单位
// 当前计量单位
$inventory_unit = empty($v['inventory_unit']) ? '' : ' / '.$v['inventory_unit'];
// 原价基础字段数据
// 原价标题名称
@ -565,6 +565,7 @@ class GoodsService
if(isset($v['brand_id']))
{
$v['brand_name'] = (!empty($brand_list) && is_array($brand_list) && array_key_exists($v['brand_id'], $brand_list)) ? $brand_list[$v['brand_id']] : '';
$v['brand_goods_url'] = (APPLICATION == 'app') ? '/pages/goods-search/goods-search?brand='.$v['brand_id'] : MyUrl('index/search/index', ['brand'=>$v['brand_id']]);
}
// 时间
@ -1301,8 +1302,8 @@ class GoodsService
}
// 编辑器内容
$content_web = empty($params['content_web']) ? '' : ResourcesService::ContentStaticReplace(htmlspecialchars_decode($params['content_web']), 'add');
$fictitious_goods_value = empty($params['fictitious_goods_value']) ? '' : ResourcesService::ContentStaticReplace(htmlspecialchars_decode($params['fictitious_goods_value']), 'add');
$content_web = empty($params['content_web']) ? '' : str_replace("\n", '', ResourcesService::ContentStaticReplace(htmlspecialchars_decode($params['content_web']), 'add'));
$fictitious_goods_value = empty($params['fictitious_goods_value']) ? '' : str_replace("\n", '', ResourcesService::ContentStaticReplace(htmlspecialchars_decode($params['fictitious_goods_value']), 'add'));
// 封面图片、默认相册第一张
$images = empty($attachment['data']['images']) ? (isset($photo['data'][0]) ? $photo['data'][0] : '') : $attachment['data']['images'];
@ -1550,9 +1551,10 @@ class GoodsService
* @version 1.0.0
* @date 2018-07-09
* @desc description
* @param [array] $params [输入参数]
* @param [array] $params [输入参数]
* @param [array] $base_count [教程参数个数默认9]
*/
public static function GetFormGoodsSpecificationsParams($params = [])
public static function GetFormGoodsSpecificationsParams($params = [], $base_count = 9)
{
$data = [];
$title = [];
@ -1560,7 +1562,6 @@ class GoodsService
// 基础字段数据字段长度
// 销售价、原价、起购数、限购数、重量、体积、编码、条形码、扩展
$base_count = 9;
// 规格值
foreach($params as $k=>$v)

View File

@ -48,7 +48,7 @@ class GoodsSpecService
return DataReturn($ret, -1);
}
// 获取分类所有分类id
// 获取分类所有分类上级id
$data = [];
$ids = GoodsCategoryService::GoodsCategoryParentIds($params['category_ids']);
if(!empty($ids))

View File

@ -34,22 +34,21 @@ class LinkService
*/
public static function HomeLinkList($params = [])
{
// 从缓存获取
$key = SystemService::CacheKey('shopxo.cache_home_link_list_key');
$data = MyCache($key);
if($data == null || MyEnv('app_debug'))
$data = [];
$is_mobile = IsMobile();
if(!$is_mobile || ($is_mobile && MyC('home_index_friendship_link_status') == 1))
{
$is_mobile = IsMobile();
if(!$is_mobile || ($is_mobile && MyC('home_index_friendship_link_status') == 1))
// 从缓存获取
$key = SystemService::CacheKey('shopxo.cache_home_link_list_key');
$data = MyCache($key);
if($data == null || MyEnv('app_debug'))
{
$ret = self::LinkList(['where'=>['is_enable'=>1]]);
$data = empty($ret['data']) ? [] : $ret['data'];
} else {
$data = [];
}
// 存储缓存
MyCache($key, $data, 180);
// 存储缓存
MyCache($key, $data, 180);
}
}
return $data;
}

View File

@ -53,6 +53,10 @@ class NavigationService
// 获取导航数据
$header = self::NavDataAll('header');
}
if(empty($header))
{
$header = [];
}
// 底部导航
if($footer === null || $is_query)
@ -60,6 +64,10 @@ class NavigationService
// 获取导航数据
$footer = self::NavDataAll('footer');
}
if(empty($footer))
{
$footer = [];
}
// 中间大导航添加首页导航
array_unshift($header, [

View File

@ -1811,6 +1811,30 @@ class OrderAftersaleService
return '';
}
/**
* 订单售后选择类型列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2025-04-16
* @desc description
* @param [int] $order_id [订单id]
*/
public static function OrderAftersaleChoiceTypeList($order_id)
{
$aftersale_type_list = MyConst('common_order_aftersale_type_list');
if(!empty($aftersale_type_list))
{
// 非3已发货/待收货, 4已完成则移除退货退款的类型
$status = Db::name('Order')->where(['id'=>$order_id])->value('status');
if(!in_array($status, [3,4]))
{
unset($aftersale_type_list[1]);
}
}
return $aftersale_type_list;
}
/**
* 订单售后进度
* @author Devil

View File

@ -2467,13 +2467,10 @@ class OrderService
self::OrderHistoryAdd($order['id'], $upd_data['status'], $order['status'], MyLang('delivery_title'), $creator, $creator_name);
// 同步微信发货
if(isset($order['client_type']) && $order['client_type'] == 'weixin')
$ret = self::OrderDeliverySyncWeixin($order, $params);
if(!empty($ret) && isset($ret['code']) && $ret['code'] != 0)
{
$ret = self::OrderDeliverySyncWeixin($order, $params);
if(!empty($ret) && isset($ret['code']) && $ret['code'] != 0)
{
return $ret;
}
return $ret;
}
// 完成

View File

@ -268,7 +268,7 @@ class OrderSplitService
['w.is_enable', '=', 1],
['w.is_delete_time', '=', 0],
];
$field = 'distinct w.id,w.name,w.alias,w.lng,w.lat,w.province,w.city,w.county,w.address,wgs.inventory,w.is_default,w.level';
$field = 'w.*,wgs.inventory';
$warehouse = Db::name('WarehouseGoodsSpec')->alias('wgs')->join('warehouse_goods wg', 'wgs.warehouse_id=wg.warehouse_id')->join('warehouse w', 'wg.warehouse_id=w.id')->where($where)->field($field)->order('w.level desc,w.is_default desc,wgs.inventory desc')->select()->toArray();
// 商品仓库分配仓库组合钩子
@ -300,7 +300,7 @@ class OrderSplitService
}
// 总价计算
$temp_v['total_price'] = PriceBeautify(PriceNumberFormat($temp_v['price']*$temp_v['stock']));
$temp_v['total_price'] = PriceBeautify(PriceNumberFormat(floatval($temp_v['price'])*$temp_v['stock']));
// 减除数量
$v['stock'] -= $w['inventory'];
@ -309,6 +309,7 @@ class OrderSplitService
if(!array_key_exists($w['id'], $result))
{
// 仓库
unset($w['is_enable'], $w['is_delete_time'], $w['contacts_name'], $w['contacts_tel'], $w['add_time'], $w['upd_time']);
$warehouse_handle = WarehouseService::WarehouseListHandle([$w]);
$result[$w['id']] = $warehouse_handle[0];
$result[$w['id']]['goods_items'] = [];

View File

@ -61,8 +61,8 @@ class OtherHandleService
// 发货快递信息
$express_id = isset($params['express_id']) ? intval($params['express_id']) : 0;
$express_number = isset($params['express_number']) ? intval($params['express_number']) : '';
$receiver_tel = isset($params['receiver_tel']) ? intval($params['receiver_tel']) : '';
$express_number = isset($params['express_number']) ? $params['express_number'] : '';
$receiver_tel = isset($params['receiver_tel']) ? $params['receiver_tel'] : '';
// 调用微信发货同步
return (new \base\Wechat(AppMiniUserService::AppMiniConfig('common_app_mini_weixin_appid'), AppMiniUserService::AppMiniConfig('common_app_mini_weixin_appsecret')))->MiniUploadShippingInfo([

View File

@ -347,5 +347,103 @@ class PayLogService
}
return DataReturn(MyLang('close_fail'), -100);
}
/**
* 支付订单页面列表数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2025-03-28
* @desc description
* @param [array] $params [输入参数]
*/
public static function PayLogPagesListData($params = [])
{
// 数据
$data = [
// 商城订单
[
'name' => MyLang('shop_order'),
'url' => (APPLICATION_CLIENT_TYPE == 'pc') ? MyUrl('index/order/index') : '/pages/user-order/user-order',
]
];
// 支付日志页面列表数据
$hook_name = 'plugins_service_paylog_pages_list_data';
MyEventTrigger($hook_name, [
'hook_name' => $hook_name,
'is_backend' => true,
'params' => $params,
'data' => &$data,
]);
return DataReturn('success', 0, $data);
}
/**
* 支付订单页面详情数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2025-03-28
* @desc description
* @param [array] $params [输入参数]
*/
public static function PayLogPagesDetailData($params = [])
{
// 支付数据
$where = [
['user_id', '=', $params['user_id']],
['status', '=', 1],
];
if(!empty($params['id']))
{
$where[] = ['id', '=', intval($params['id'])];
}
if(!empty($params['orderno']))
{
$where[] = ['log_no', '=', trim($params['orderno'])];
}
$pay_log = Db::name('PayLog')->where($where)->find();
if(empty($pay_log))
{
return DataReturn(MyLang('no_data'), -1);
}
// 获取业务数据
$pay_log_business = Db::name('PayLogValue')->where(['pay_log_id'=>$pay_log['id']])->select()->toArray();
if(empty($pay_log_business))
{
return DataReturn(MyLang('common_service.paylog.pay_log_value_no_data_tips'), -1);
}
$data = [];
foreach($pay_log_business as $v)
{
// 系统订单
if($pay_log['business_type'] == 'order')
{
$data[] = [
'url' => (APPLICATION_CLIENT_TYPE == 'pc') ? MyUrl('index/order/detail', ['id'=>$v['business_id']]) : '/pages/user-order-detail/user-order-detail?id='.$v['business_id'],
'order_no' => $v['business_no'],
];
}
}
// 支付日志页面详情数据
$hook_name = 'plugins_service_paylog_pages_detail_data';
MyEventTrigger($hook_name, [
'hook_name' => $hook_name,
'is_backend' => true,
'params' => $params,
'data' => &$data,
'pay_log' => $pay_log,
'pay_log_business' => $pay_log_business,
]);
if(empty($data))
{
return DataReturn(MyLang('common_service.paylog.pay_log_value_no_data_tips'), -1);
}
return DataReturn('success', 0, $data);
}
}
?>

View File

@ -426,7 +426,7 @@ class RegionService
MyCache($key, $data, 60);
}
}
return DataReturn('success', 0, $data);
return $data;
}
/**

View File

@ -990,7 +990,6 @@ class StatisticalService
$goods_hot = self::GoodsHotTotal($params);
$pay_type = self::PayTypeTotal($params);
$order_whole_country = self::OrderWholeCountryTotal($params);
$renew_usert = self::NewUserTotal($params);
$buy_user = self::BuyUserTotal($params);
$new_user = self::NewUserTotal($params);
$ret = DataReturn('success', 0, [
@ -999,7 +998,6 @@ class StatisticalService
'goods_hot' => $goods_hot['data'],
'pay_type' => $pay_type['data'],
'order_whole_country' => $order_whole_country['data'],
'renew_usert' => $renew_usert['data'],
'buy_user' => $buy_user['data'],
'new_user' => $new_user['data'],
]);

View File

@ -506,33 +506,39 @@ class UeditorService
$list = [];
if(!empty(self::$params[$field_name]))
{
// 当前站点域名或者附件域名不下载
$attachment_host = GetUrlHost(SystemBaseService::AttachmentHost());
// 源文件
$source = is_array(self::$params[$field_name]) ? self::$params[$field_name] : [self::$params[$field_name]];
foreach($source as $url)
{
$up = new \base\Uploader($url, $temp_config, 'remote');
/**
* 得到上传文件所对应的各个参数,数组结构
* array(
* "state" => "", //上传状态,上传成功时必须返回"SUCCESS"
* "url" => "", //返回的地址
* "path" => "", //绝对地址
* "title" => "", //新文件名
* "original" => "", //原始文件名
* "type" => "" //文件类型
* "size" => "", //文件大小
* "hash" => "", //sha256值
* )
*/
$data = $up->getFileInfo();
if(isset($data['state']) && $data['state'] == 'SUCCESS')
if(GetUrlHost($url) != $attachment_host)
{
$data['type'] = $attachment_type;
$data['category_id'] = self::$category_id;
$ret = AttachmentService::AttachmentAdd($data);
if($ret['code'] == 0)
$up = new \base\Uploader($url, $temp_config, 'remote');
/**
* 得到上传文件所对应的各个参数,数组结构
* array(
* "state" => "", //上传状态,上传成功时必须返回"SUCCESS"
* "url" => "", //返回的地址
* "path" => "", //绝对地址
* "title" => "", //新文件名
* "original" => "", //原始文件名
* "type" => "" //文件类型
* "size" => "", //文件大小
* "hash" => "", //sha256值
* )
*/
$data = $up->getFileInfo();
if(isset($data['state']) && $data['state'] == 'SUCCESS')
{
$ret['data']['source'] = htmlspecialchars($url);
array_push($list, $ret['data']);
$data['type'] = $attachment_type;
$data['category_id'] = self::$category_id;
$ret = AttachmentService::AttachmentAdd($data);
if($ret['code'] == 0)
{
$ret['data']['source'] = htmlspecialchars($url);
array_push($list, $ret['data']);
}
}
}
}

View File

@ -382,30 +382,36 @@ class UserAddressService
'is_default' => $is_default,
];
// 坐标
if(array_key_exists('lng', $params))
if(MyC('home_user_address_map_status') == 1)
{
$data['lng'] = isset($params['lng']) ? floatval($params['lng']) : 0;
}
if(array_key_exists('lat', $params))
{
$data['lat'] = isset($params['lat']) ? floatval($params['lat']) : 0;
if(array_key_exists('lng', $params))
{
$data['lng'] = isset($params['lng']) ? floatval($params['lng']) : 0;
}
if(array_key_exists('lat', $params))
{
$data['lat'] = isset($params['lat']) ? floatval($params['lat']) : 0;
}
}
// 身份证信息
if(array_key_exists('idcard_name', $params))
if(MyC('home_user_address_idcard_status') == 1)
{
$data['idcard_name'] = empty($params['idcard_name']) ? '' : $params['idcard_name'];
}
if(array_key_exists('idcard_number', $params))
{
$data['idcard_number'] = empty($params['idcard_number']) ? '' : $params['idcard_number'];
}
if(array_key_exists('idcard_front', $params))
{
$data['idcard_front'] = $attachment['data']['idcard_front'];
}
if(array_key_exists('idcard_back', $params))
{
$data['idcard_back'] = $attachment['data']['idcard_back'];
if(array_key_exists('idcard_name', $params))
{
$data['idcard_name'] = empty($params['idcard_name']) ? '' : $params['idcard_name'];
}
if(array_key_exists('idcard_number', $params))
{
$data['idcard_number'] = empty($params['idcard_number']) ? '' : $params['idcard_number'];
}
if(array_key_exists('idcard_front', $params))
{
$data['idcard_front'] = $attachment['data']['idcard_front'];
}
if(array_key_exists('idcard_back', $params))
{
$data['idcard_back'] = $attachment['data']['idcard_back'];
}
}
// 用户地址保存前钩子

View File

@ -311,6 +311,11 @@ class UserService
if(!empty($token))
{
$user_cache_login_info = self::CacheUserTokenData($token);
// 存在token用户信息则记录session
if(!empty($user_cache_login_info))
{
self::UserLoginRecord(0, $user_cache_login_info);
}
}
}
} else {
@ -1053,11 +1058,15 @@ class UserService
// 图像类库
$images_obj = \base\Images::Instance(['is_new_name'=>false]);
// 文件上传校验
$error = FileUploadError($params['img_field']);
if($error !== true)
// 文件上传校验、仅表单$_FILES的方式验证
$is_file_url = !empty($params[$params['img_field']]) && substr($params[$params['img_field']], 0, 4) == 'http';
if(!$is_file_url)
{
return DataReturn($error, -2);
$error = FileUploadError($params['img_field']);
if($error !== true)
{
return DataReturn($error, -2);
}
}
// 头像处理前钩子
@ -1080,11 +1089,17 @@ class UserService
// 是否指定裁剪信息
$original_dir = $root_path.$img_path.'original'.$date;
if(!empty($params['img_width']) && !empty($params['img_height']) && isset($params['img_x']) && isset($params['img_y']))
// 是否url链接地址
if($is_file_url)
{
$original = $images_obj->GetCompressCut($_FILES[$params['img_field']], $original_dir, 800, 800, $params['img_x'], $params['img_y'], $params['img_width'], $params['img_height']);
$original = $images_obj->DownloadImageSave($params[$params['img_field']], $original_dir);
} else {
$original = $images_obj->GetOriginal($_FILES[$params['img_field']], $original_dir);
if(!empty($params['img_width']) && !empty($params['img_height']) && isset($params['img_x']) && isset($params['img_y']))
{
$original = $images_obj->GetCompressCut($_FILES[$params['img_field']], $original_dir, 800, 800, $params['img_x'], $params['img_y'], $params['img_width'], $params['img_height']);
} else {
$original = $images_obj->GetOriginal($_FILES[$params['img_field']], $original_dir);
}
}
if(!empty($original))
{

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