fix: 完善并增加多语言包

This commit is contained in:
Anyon 2025-11-17 12:37:22 +08:00
parent 2d3a9b5ef9
commit e49fa0ac4e
128 changed files with 4094 additions and 2003 deletions

View File

@ -14,130 +14,138 @@
// | github 仓库地址 https://github.com/zoujingli/ThinkLibrary
// +----------------------------------------------------------------------
declare (strict_types=1);
declare(strict_types=1);
use think\admin\Library;
use think\admin\model\SystemBase;
// 动态读取英文数据字典
if (count($langs = Library::$sapp->cache->get('lang-en-us', [])) < 1) {
/**
* 动态加载英文数据字典
* 从系统数据字典中读取英文翻译,并缓存以提高性能
*/
$cacheKey = 'lang-en-us';
$langs = Library::$sapp->cache->get($cacheKey, []);
if (empty($langs)) {
// 从数据字典读取英文翻译
$langs = array_column(SystemBase::items('英文字典'), 'name', 'code');
$menus = array_column(SystemBase::items('英文菜单'), 'name', 'code');
foreach ($menus as $key => $name) $langs["menus_{$key}"] = $name;
Library::$sapp->cache->set('lang-en-us', $langs, 360);
// 读取英文菜单并合并到语言包中(使用 menus_ 前缀)
$menuItems = array_column(SystemBase::items('英文菜单'), 'name', 'code');
foreach ($menuItems as $key => $name) {
$langs["menus_{$key}"] = $name;
}
// 缓存语言包数据,有效期 360 秒
Library::$sapp->cache->set($cacheKey, $langs, 360);
}
// 定义菜单专用语言包,使用固定前缀 `menus_` 开头
// 数据字典菜单语言包类型为:英文菜单,配置与 英文字典 相同
// PS. 使用前缀是方便后缀追加配置,另外历史版本未开启语言分组
// PS. 该文件仅在英文模式下才会加载,系统默认使用 `中文` 模式
/**
* 静态菜单语言包定义
* 使用固定前缀 `menus_` 开头,便于后续扩展和维护
* 注意:该文件仅在英文模式下才会加载,系统默认使用中文模式
*/
$menus = [
// // 系统管理菜单
// 'menus_系统管理' => 'System',
// 'menus_系统配置' => 'Configuration',
// 'menus_系统参数配置' => 'Parameter',
// 'menus_系统任务管理' => 'Tasks',
// 'menus_系统日志管理' => 'Oplog',
// 'menus_数据字典管理' => 'Dictionary',
// 'menus_系统文件管理' => 'File',
// 'menus_系统菜单管理' => 'Menu',
// 'menus_权限管理' => 'Permission',
// 'menus_访问权限管理' => 'Role',
// 'menus_系统用户管理' => 'User',
// // 微信管理菜单
// 'menus_微信管理' => 'WeChat',
// 'menus_微信接口配置' => 'Configuration',
// 'menus_微信支付配置' => 'Pay parameters',
// 'menus_微信粉丝管理' => 'Fan User',
// 'menus_微信定制' => 'Custom ',
// 'menus_微信图文管理' => 'News',
// 'menus_微信菜单配置' => 'Menu',
// 'menus_回复规则管理' => 'Reply Rule',
// 'menus_关注自动回复' => 'Auto Reply',
// 'menus_微信支付' => 'Payment',
// 'menus_支付行为管理' => 'Action Record',
// 'menus_支付退款管理' => 'Refund Record',
// // 插件中心菜单
// 'menus_插件中心' => 'Plugins'
// 系统管理菜单
'menus_系统管理' => 'System',
'menus_系统配置' => 'Config',
'menus_系统参数配置' => 'Params',
'menus_系统任务管理' => 'Tasks',
'menus_系统日志管理' => 'Logs',
'menus_数据字典管理' => 'Dict',
'menus_系统文件管理' => 'Files',
'menus_系统菜单管理' => 'Menus',
'menus_权限管理' => 'Perms',
'menus_访问权限管理' => 'Roles',
'menus_系统用户管理' => 'Users',
// 微信管理菜单
'menus_微信管理' => 'WeChat',
'menus_微信接口配置' => 'Config',
'menus_微信支付配置' => 'Pay Config',
'menus_微信粉丝管理' => 'Fans',
'menus_微信定制' => 'Custom',
'menus_微信图文管理' => 'News',
'menus_微信菜单配置' => 'Menus',
'menus_回复规则管理' => 'Rules',
'menus_关注自动回复' => 'Auto Reply',
'menus_微信支付' => 'Payment',
'menus_支付行为管理' => 'Actions',
'menus_支付退款管理' => 'Refunds',
// 插件中心菜单
'menus_插件中心' => 'Plugins',
];
$extra = [];
$extra['Y年m月d日 H:i:s'] = 'Y/m/d H:i:s';
$extra['请重新登录!'] = 'Invalid login authorization, Please login again.';
$extra['共 %s 条记录,每页显示 %s 条,共 %s 页当前显示第 %s 页。'] = 'Total %s records, display %s per page, total %s page current display %s page.';
/**
* 额外语言包配置
* 包含日期格式、登录提示、分页信息等特殊翻译
*/
$extra = [
'Y年m月d日 H:i:s' => 'Y/m/d H:i:s',
'请重新登录!' => 'Invalid authorization, please login again.',
'共 %s 条记录,每页显示 %s 条,共 %s 页当前显示第 %s 页。' => 'Total %s records, %s per page, page %s of %s.',
];
return array_merge([
// 常规操作翻译
// '全部' => 'All',
// '添 加' => 'Add',
// '编 辑' => 'Edit',
// '删 除' => 'Delete',
// '搜 索' => 'Search',
// '导 出' => 'Export',
// '已禁用' => 'Disabled',
// '已激活' => 'Activated',
// '排序权重' => 'Sort',
// '回 收 站' => 'Recycle',
// '保存数据' => 'Submit',
// '取消编辑' => 'Cancel',
// '操作面板' => 'Panel',
// '使用状态' => 'Status',
// '条件搜索' => 'Search',
// '清空数据' => 'Clears Data',
// '创建时间' => 'Create Time',
// '批量删除' => 'Remove Selected',
// '批量禁用' => 'Forbid Selected',
// '批量恢复' => 'Resume Selected',
// '已禁用记录' => 'Disabled Records',
// '已激活记录' => 'Activated Records',
/**
* 基础语言包定义
* 包含接口提示、存储引擎、日志记录、模块管理等翻译
*/
$base = [
// 接口提示内容
'数据删除成功!' => 'Successfully deleted.',
'数据删除失败!' => 'Sorry, Delete failed.',
'数据保存成功!' => 'Successfully saved.',
'数据保存失败!' => 'Sorry, Save failed.',
'数据排序成功!' => 'Successfully Sorted.',
'列表排序失败!' => 'Sorry, Sorting failed.',
'请求响应异常!' => 'Sorry, Request response exception.',
'请求响应成功!' => 'Sorry, Request response successful.',
'未授权禁止访问!' => 'Sorry, Unauthorized access prohibited.',
'会话无效或已失效!' => 'The session is invalid or has expired.',
'表单令牌验证失败!' => 'The Form token is validation failed.',
'接口账号验证失败!' => 'Interface account verification failed.',
'接口请求时差过大!' => 'Interface request time difference too large.',
'接口签名验证失败!' => 'Interface signature verification failed.',
'非JWT访问' => 'Please use JWT to access.',
'请求参数 %s 不能为空!' => 'Request parameter %s cannot be empty.',
'接口请求响应格式异常!' => 'Abnormal format of interface request response.',
'耗时 %.4f 秒' => 'Time taken %.4f seconds',
'创建任务失败,%s' => 'Failed to create task, %s',
'已创建请等待处理完成!' => 'Task has been created, please wait for processing to complete.',
'删除%s[%s]及授权配置' => 'Delete %s[%s] and authorization configuration',
'暂无轨迹信息~' => 'No trajectory information currently available',
'数据删除成功!' => 'Deleted successfully.',
'数据删除失败!' => 'Delete failed.',
'数据保存成功!' => 'Saved successfully.',
'数据保存失败!' => 'Save failed.',
'数据排序成功!' => 'Sorted successfully.',
'列表排序失败!' => 'Sort failed.',
'请求响应异常!' => 'Request exception.',
'请求响应成功!' => 'Request successful.',
'未授权禁止访问!' => 'Unauthorized access.',
'会话无效或已失效!' => 'Session invalid or expired.',
'表单令牌验证失败!' => 'Form token validation failed.',
'接口账号验证失败!' => 'Account verification failed.',
'接口请求时差过大!' => 'Request time difference too large.',
'接口签名验证失败!' => 'Signature verification failed.',
'非JWT访问' => 'JWT access required.',
'请求参数 %s 不能为空!' => 'Parameter %s cannot be empty.',
'接口请求响应格式异常!' => 'Invalid response format.',
'耗时 %.4f 秒' => 'Time: %.4f s',
'创建任务失败,%s' => 'Failed to create task: %s',
'已创建请等待处理完成!' => 'Task created, please wait.',
'删除%s[%s]及授权配置' => 'Delete %s[%s] and authorization',
'暂无轨迹信息~' => 'No trajectory info.',
// 存储引擎翻译
'本地服务器存储' => 'Local server storage',
'自建Alist存储' => 'Self built Alist storage',
'又拍云USS存储' => 'Upyun Cloud USS storage',
'阿里云OSS存储' => 'Aliyun Cloud OSS storage',
'腾讯云COS存储' => 'Tencent Cloud COS Storage',
'七牛云对象存储' => 'Qiniu Cloud Object storage',
'未配置又拍云域名' => 'Unconfigured Upyun Cloud domain',
'未配置阿里云域名' => 'Unconfigured Aliyun Cloud domain',
'未配置七牛云域名' => 'Unconfigured Qiniu Cloud domain',
'未配置腾讯云域名' => 'Unconfigured Tencent Cloud domain',
'未配置Alist域名' => 'Unconfigured Alist Server domain',
'本地服务器存储' => 'Local Storage',
'自建Alist存储' => 'Alist Storage',
'又拍云USS存储' => 'Upyun USS',
'阿里云OSS存储' => 'Aliyun OSS',
'腾讯云COS存储' => 'Tencent COS',
'七牛云对象存储' => 'Qiniu OSS',
'未配置又拍云域名' => 'Upyun domain not configured',
'未配置阿里云域名' => 'Aliyun domain not configured',
'未配置七牛云域名' => 'Qiniu domain not configured',
'未配置腾讯云域名' => 'Tencent domain not configured',
'未配置Alist域名' => 'Alist domain not configured',
// 默认日志翻译
'增加%s[%s]成功' => 'Added: %s [ %s ]',
'修改%s[%s]状态' => 'Modify: %s [ %s ]',
'更新%s[%s]记录' => 'Update: %s [ %s ]',
'删除%s[%s]成功' => 'Remove: %s [ %s ]',
'增加%s[%s]成功' => 'Added: %s[%s]',
'修改%s[%s]状态' => 'Modified: %s[%s]',
'更新%s[%s]记录' => 'Updated: %s[%s]',
'删除%s[%s]成功' => 'Deleted: %s[%s]',
// 模块管理翻译
// '系统任务管理' => 'System Task Management',
// '系统菜单管理' => 'System Menu Management',
// '系统文件管理' => 'System File Management',
// '系统用户管理' => 'System User Management',
// '系统日志管理' => 'System Oplog Management',
// '系统参数配置' => 'System Parameter Management',
// '系统权限管理' => 'System Permission Management',
// '数据字典管理' => 'System Dictionary Management',
// '系统运维管理' => 'System Maintenance Management',
], $extra, $menus, $langs);
'系统任务管理' => 'Task Management',
'系统菜单管理' => 'Menu Management',
'系统文件管理' => 'File Management',
'系统用户管理' => 'User Management',
'系统日志管理' => 'Logs Management',
'系统参数配置' => 'Parameter Management',
'访问权限管理' => 'Permission Management',
'数据字典管理' => 'Dictionary Management',
'系统运维管理' => 'Maintenance Management',
];
// 合并所有语言包:基础翻译 -> 额外配置 -> 静态菜单 -> 动态字典
return array_merge($base, $extra, $menus, $langs);

View File

@ -14,26 +14,48 @@
// | github 仓库地址 https://github.com/zoujingli/ThinkLibrary
// +----------------------------------------------------------------------
declare (strict_types=1);
declare(strict_types=1);
use think\admin\Library;
use think\admin\model\SystemBase;
// 动态读取繁体数据字典
if (count($langs = Library::$sapp->cache->get('lang-zh-tw', [])) < 1) {
/**
* 動態加載繁體中文數據字典
* 從系統數據字典中讀取繁體中文翻譯,並緩存以提高性能
*/
$cacheKey = 'lang-zh-tw';
$langs = Library::$sapp->cache->get($cacheKey, []);
if (empty($langs)) {
// 從數據字典讀取繁體中文翻譯
$langs = array_column(SystemBase::items('繁体中文'), 'name', 'code');
$menus = array_column(SystemBase::items('繁体菜单'), 'name', 'code');
foreach ($menus as $key => $name) $langs["menus_{$key}"] = $name;
Library::$sapp->cache->set('lang-zh-tw', $langs, 360);
// 讀取繁體菜單並合併到語言包中(使用 menus_ 前綴)
$menuItems = array_column(SystemBase::items('繁体菜单'), 'name', 'code');
foreach ($menuItems as $key => $name) {
$langs["menus_{$key}"] = $name;
}
// 緩存語言包數據,有效期 360 秒
Library::$sapp->cache->set($cacheKey, $langs, 360);
}
$extra = [];
$extra['Y年m月d日 H:i:s'] = 'Y年m月d日 H:i:s';
$extra['请重新登录!'] = '登錄授權無效,請重新登錄!';
$extra['共 %s 条记录,每页显示 %s 条,共 %s 页当前显示第 %s 页。'] = '共 %s 條記錄,每頁顯示 %s 條,共 %s 頁當前顯示第 %s 頁。';
/**
* 額外語言包配置
* 包含日期格式、登錄提示、分頁信息等特殊翻譯
*/
$extra = [
'Y年m月d日 H:i:s' => 'Y年m月d日 H:i:s',
'请重新登录!' => '登錄授權無效,請重新登錄!',
'共 %s 条记录,每页显示 %s 条,共 %s 页当前显示第 %s 页。' => '共 %s 條記錄,每頁顯示 %s 條,共 %s 頁當前顯示第 %s 頁。',
];
return array_merge([
// 接口提示内容
/**
* 基礎語言包定義
* 包含接口提示、存儲引擎、日誌記錄、模塊管理等翻譯
*/
$base = [
// 接口提示內容
'数据删除成功!' => '數據刪除成功!',
'数据删除失败!' => '數據刪除失敗!',
'数据保存成功!' => '數據保存成功!',
@ -45,7 +67,7 @@ return array_merge([
'未授权禁止访问!' => '未授權禁止訪問!',
'会话无效或已失效!' => '會話無效或已失效!',
'表单令牌验证失败!' => '表單令牌驗證失敗!',
'接口账号验证失败!' => '接口账号验证失败',
'接口账号验证失败!' => '接口賬號驗證失敗',
'接口请求时差过大!' => '接口請求時差過大!',
'接口签名验证失败!' => '接口簽名驗證失敗!',
'非JWT访问' => '請使用 JWT 方式訪問!',
@ -56,21 +78,37 @@ return array_merge([
'已创建请等待处理完成!' => '已創建請等待處理完成!',
'删除%s[%s]及授权配置' => '刪除%s[%s]及授權配置',
'暂无轨迹信息~' => '暫無軌迹信息~',
// 存储引擎翻译
// 存儲引擎翻譯
'本地服务器存储' => '本地服務器存儲',
'自建Alist存储' => '自建Alist存儲',
'七牛云对象存储' => '七牛雲對象存儲',
'又拍云USS存储' => '又拍雲USS存儲',
'阿里云OSS存储' => '阿裏雲OSS存儲',
'腾讯云COS存储' => '騰訊雲COS存儲',
'七牛云对象存储' => '七牛雲對象存儲',
'未配置又拍云域名' => '未配置又拍雲域名',
'未配置阿里云域名' => '未配置阿裏雲域名',
'未配置七牛云域名' => '未配置七牛雲域名',
'未配置腾讯云域名' => '未配置腾讯云域名',
'未配置腾讯云域名' => '未配置騰訊雲域名',
'未配置Alist域名' => '未配置Alist域名',
// 默认日志翻译
// 默認日誌翻譯
'增加%s[%s]成功' => '增加%s[%s]成功',
'修改%s[%s]状态' => '修改%s[%s]狀態',
'更新%s[%s]记录' => '更新%s[%s]記錄',
'删除%s[%s]成功' => '刪除%s[%s]成功',
], $extra, $langs);
// 模塊管理翻譯
'系统任务管理' => '系統任務管理',
'系统菜单管理' => '系統菜單管理',
'系统文件管理' => '系統文件管理',
'系统用户管理' => '系統用戶管理',
'系统日志管理' => '系統日誌管理',
'系统参数配置' => '系統參數配置',
'访问权限管理' => '訪問權限管理',
'数据字典管理' => '數據字典管理',
'系统运维管理' => '系統運維管理',
];
// 合併所有語言包:基礎翻譯 -> 額外配置 -> 動態字典
return array_merge($base, $extra, $langs);

View File

@ -0,0 +1,101 @@
<?php
// +----------------------------------------------------------------------
// | Account Plugin for ThinkAdmin
// +----------------------------------------------------------------------
// | 版权所有 2014~2025 ThinkAdmin [ thinkadmin.top ]
// +----------------------------------------------------------------------
// | 官方网站: https://thinkadmin.top
// +----------------------------------------------------------------------
// | 开源协议 ( https://mit-license.org )
// | 免责声明 ( https://thinkadmin.top/disclaimer )
// +----------------------------------------------------------------------
$extra = [];
return array_merge($extra, [
// 通用
'用户管理' => 'User Management',
'回 收 站' => 'Recycle Bin',
'排序权重' => 'Sort Weight',
'头像' => 'Avatar',
'账号状态' => 'Account Status',
'操作面板' => 'Actions',
'已激活' => 'Activated',
'已禁用' => 'Disabled',
'已启用' => 'Enabled',
'已冻结的用户' => 'Frozen Users',
'已激活的用户' => 'Activated Users',
'删 除' => 'Delete',
'保存数据' => 'Save Data',
'取消编辑' => 'Cancel Edit',
'保存配置' => 'Save Configuration',
'取消修改' => 'Cancel Modification',
'确定要取消编辑吗?' => 'Are you sure you want to cancel editing?',
'确定要取消修改吗?' => 'Are you sure you want to cancel the modification?',
'确定要永久删除此账号吗?' => 'Are you sure you want to permanently delete this account?',
'全部' => 'All',
'搜 索' => 'Search',
'导 出' => 'Export',
// 设备管理
'账号接口配置' => 'Account Interface Configuration',
'账号配置' => 'Account Configuration',
'终端类型' => 'Device Type',
'绑定手机' => 'Bound Mobile',
'用户姓名' => 'User Name',
'用户昵称' => 'User Nickname',
'关联账号' => 'Associated Account',
'使用状态' => 'Status',
'首次登录' => 'First Login',
'请输入绑定手机' => 'Please enter bound mobile',
'请输入用户姓名' => 'Please enter user name',
'请输入用户昵称' => 'Please enter user nickname',
'请选择绑定时间' => 'Please select binding time',
'用户账号数据' => 'User Account Data',
// 主账号管理
'用户编号' => 'User Code',
'绑定邮箱' => 'Bound Email',
'绑定时间' => 'Binding Time',
'请输入用户编号' => 'Please enter user code',
'请输入绑定邮箱' => 'Please enter bound email',
// 消息管理
'短信配置' => 'SMS Configuration',
'消息编号' => 'Message Code',
'短信类型' => 'SMS Type',
'发送手机' => 'Send Mobile',
'短信内容' => 'SMS Content',
'发送时间' => 'Send Time',
'发送失败' => 'Send Failed',
'发送成功' => 'Send Success',
'请输入消息编号' => 'Please enter message code',
'请输入发送手机' => 'Please enter send mobile',
'请输入短信内容' => 'Please enter SMS content',
'请选择发送时间' => 'Please select send time',
// 短信配置
'服务区域' => 'Service Region',
'阿里云账号' => 'Aliyun Account',
'阿里云密钥' => 'Aliyun Secret Key',
'短信签名' => 'SMS Signature',
'短信模板编号' => 'SMS Template Code',
'请输入阿里云账号' => 'Please enter Aliyun account',
'请输入阿里云密钥' => 'Please enter Aliyun secret key',
'请输入短信签名' => 'Please enter SMS signature',
'请输入短信模板编号' => 'Please enter SMS template code',
// 账号配置
'认证有效时间' => 'Authentication Expire Time',
'登录自动注册' => 'Auto Register on Login',
'默认昵称前缀' => 'Default Nickname Prefix',
'默认用户头像' => 'Default User Avatar',
'开放接口通道' => 'Open Interface Channels',
'设置为 0 表示永不过期,建议设置有效时间达到系统自动回收令牌。' => 'Set to 0 means never expires. It is recommended to set an expiration time for automatic token recycling.',
'启用自动登录时,通过验证码登录时账号不存在会自动创建!' => 'When auto login is enabled, accounts that do not exist will be automatically created when logging in with verification code!',
'用户绑定账号后会自动使用此前缀与手机号后4位拼接为新默认昵称。' => 'After user binds account, this prefix will be automatically combined with the last 4 digits of mobile number as new default nickname.',
'当用户未设置头像时,自动使用此头像设置的图片链接。' => 'When user has not set avatar, automatically use the image link set in this avatar.',
'请输入默认昵称前缀' => 'Please enter default nickname prefix',
]);

View File

@ -2,14 +2,14 @@
{block name="button"}
<!--{if auth("config")}-->
<button data-modal="{:url('config')}" data-width="800px" data-title="账号接口配置" class='layui-btn layui-btn-sm layui-btn-primary'>账号配置</button>
<button data-modal="{:url('config')}" data-width="800px" data-title="{:lang('账号接口配置')}" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('账号配置')}</button>
<!--{/if}-->
{/block}
{block name="content"}
<div class="layui-tab layui-tab-card">
<ul class="layui-tab-title">
{foreach ['index'=>'用户管理','recycle'=>'回 收 站'] as $k=>$v}{if isset($type) and $type eq $k}
{foreach ['index'=>lang('用户管理'),'recycle'=>lang('回 收 站')] as $k=>$v}{if isset($type) and $type eq $k}
<li data-open="{:url('index')}?type={$k}" class="layui-this">{$v}</li>
{else}
<li data-open="{:url('index')}?type={$k}">{$v}</li>
@ -29,20 +29,20 @@
cols: [[
{field: 'id', hide: true},
{checkbox: true, fixed: true},
{field: 'sort', title: '排序权重', width: 100, align: 'center', sort: true, templet: '#SortInputTpl'},
{field: 'headimg', title: '头像', width: 60, align: 'center', templet: '<div>{{-showTableImage(d.headimg,true)}}</div>'},
{field: 'type', title: '终端类型', minWidth: 110, align: 'center', templet: '<div>{{d.type_name||"-"}}</div>'},
{field: 'phone', title: '绑定手机', minWidth: 110, align: 'center', templet: '<div>{{d.phone||"-"}}</div>'},
{field: 'username', title: '用户姓名', minWidth: 100, align: 'center', templet: '<div>{{d.username||"-"}}</div>'},
{field: 'nickname', title: '用户昵称', minWidth: 100, align: 'center', templet: '<div>{{d.nickname||"-"}}</div>'},
{field: 'sort', title: '{:lang("排序权重")}', width: 100, align: 'center', sort: true, templet: '#SortInputTpl'},
{field: 'headimg', title: '{:lang("头像")}', width: 60, align: 'center', templet: '<div>{{-showTableImage(d.headimg,true)}}</div>'},
{field: 'type', title: '{:lang("终端类型")}', minWidth: 110, align: 'center', templet: '<div>{{d.type_name||"-"}}</div>'},
{field: 'phone', title: '{:lang("绑定手机")}', minWidth: 110, align: 'center', templet: '<div>{{d.phone||"-"}}</div>'},
{field: 'username', title: '{:lang("用户姓名")}', minWidth: 100, align: 'center', templet: '<div>{{d.username||"-"}}</div>'},
{field: 'nickname', title: '{:lang("用户昵称")}', minWidth: 100, align: 'center', templet: '<div>{{d.nickname||"-"}}</div>'},
{
field: 'id', title: '关联账号', minWidth: 100, align: 'center', templet: function (d) {
field: 'id', title: '{:lang("关联账号")}', minWidth: 100, align: 'center', templet: function (d) {
return d.user ? d.user.code : '-';
}
},
{field: 'status', title: '账号状态', align: 'center', minWidth: 110, templet: '#StatusSwitchTpl'},
{field: 'create_time', title: '首次登录', align: 'center', minWidth: 170, sort: true},
{toolbar: '#toolbar', field: 'id', title: '操作面板', align: 'center', minWidth: 150, fixed: 'right'}
{field: 'status', title: '{:lang("账号状态")}', align: 'center', minWidth: 110, templet: '#StatusSwitchTpl'},
{field: 'create_time', title: '{:lang("首次登录")}', align: 'center', minWidth: 170, sort: true},
{toolbar: '#toolbar', field: 'id', title: '{:lang("操作面板")}', align: 'center', minWidth: 150, fixed: 'right'}
]]
});
@ -61,9 +61,9 @@
<!-- 数据状态切换模板 -->
<script type="text/html" id="StatusSwitchTpl">
<!--{if auth("state")}-->
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="已激活|已禁用" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="{:lang('已激活')}|{:lang('已禁用')}" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<!--{else}-->
{{-d.status ? '<b class="color-green">已启用</b>' : '<b class="color-red">已禁用</b>'}}
{{-d.status ? '<b class="color-green">{:lang("已启用")}</b>' : '<b class="color-red">{:lang("已禁用")}</b>'}}
<!--{/if}-->
</script>
@ -74,7 +74,7 @@
<script type="text/html" id="toolbar">
{if auth("remove")}
<a class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="确定要永久删除此账号吗?" data-action="{:url('remove')}" data-value="id#{{d.id}}"> </a>
<a class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="{:lang('确定要永久删除此账号吗?')}" data-action="{:url('remove')}" data-value="id#{{d.id}}">{:lang('删 除')}</a>
{/if}
</script>
{/block}

View File

@ -15,24 +15,24 @@
</div>
<label class="layui-form-item block relative">
<span class="help-label"><b>阿里云账号</b>AccessKeyId</span>
<input class="layui-input" name="alisms_keyid" vali-name="阿里云账号" placeholder="请输入阿里云账号" required value="{$vo.alisms_keyid|default=''}">
<span class="help-label"><b>{:lang('阿里云账号')}</b>AccessKeyId</span>
<input class="layui-input" name="alisms_keyid" vali-name="{:lang('阿里云账号')}" placeholder="{:lang('请输入阿里云账号')}" required value="{$vo.alisms_keyid|default=''}">
</label>
<label class="layui-form-item block relative">
<span class="help-label"><b>阿里云密钥</b>AccessKeySecret</span>
<input class="layui-input" name="alisms_secret" vali-name="阿里云密钥" placeholder="请输入阿里云密钥" required value="{$vo.alisms_secret|default=''}">
<span class="help-label"><b>{:lang('阿里云密钥')}</b>AccessKeySecret</span>
<input class="layui-input" name="alisms_secret" vali-name="{:lang('阿里云密钥')}" placeholder="{:lang('请输入阿里云密钥')}" required value="{$vo.alisms_secret|default=''}">
</label>
<label class="layui-form-item block relative">
<span class="help-label"><b>短信签名</b>SignName</span>
<input class="layui-input" name="alisms_signtx" vali-name="短信签名" placeholder="请输入短信签名" required value="{$vo.alisms_signtx|default=''}">
<span class="help-label"><b>{:lang('短信签名')}</b>SignName</span>
<input class="layui-input" name="alisms_signtx" vali-name="{:lang('短信签名')}" placeholder="{:lang('请输入短信签名')}" required value="{$vo.alisms_signtx|default=''}">
</label>
{foreach $scenes as $k=>$s}
<label class="layui-form-item block relative">
<span class="help-label label-required-prev"><b>{$s}</b>{:ucfirst(strtolower($k))} Code</span>
<input class="layui-input" required name="alisms_scenes[{$k}]" value="{$vo.alisms_scenes[$k]|default=''}" placeholder="请输入短信模板编号">
<input class="layui-input" required name="alisms_scenes[{$k}]" value="{$vo.alisms_scenes[$k]|default=''}" placeholder="{:lang('请输入短信模板编号')}">
</label>
{/foreach}
@ -41,7 +41,7 @@
<div class="hr-line-dashed"></div>
<div class="layui-form-item text-center ta-mt-20">
<button class="layui-btn" type="submit">保存配置</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="确定要取消修改吗?" data-close>取消修改</button>
<button class="layui-btn" type="submit">{:lang('保存配置')}</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="{:lang('确定要取消修改吗?')}" data-close>{:lang('取消修改')}</button>
</div>
</form>

View File

@ -19,6 +19,7 @@ $extra['开发人员或在功能调试时使用,系统异常时会显示详细
$extra['项目正式部署上线后使用,系统异常时统一显示 “%s”只记录重要的异常日志信息强烈推荐上线后使用此模式。'] = 'After the project is officially deployed and launched, it will be used. When there are system exceptions, " %s " will be displayed uniformly, and only important exception log information will be recorded. It is strongly recommended to use this mode after launch.';
$extra['旧版本编辑器,对浏览器兼容较好,但内容编辑体验稍有不足。'] = 'The old version of the editor is compatible with browsers, but the content editing experience is slightly insufficient.';
$extra['新版本编辑器,只支持新特性浏览器,对内容编辑体验较好,推荐使用。'] = 'The new version of the editor only supports the new feature browser and has a good experience in content editing. It is recommended to use it.';
$extra['国产优质富文本编辑器对于小程序及App内容支持会更友好推荐使用。'] = 'A high-quality Chinese rich text editor that provides better support for mini-programs and App content. Recommended for use.';
$extra['优先使用新版本编辑器,若浏览器不支持新版本时自动降级为旧版本编辑器。'] = 'Priority should be given to using the new version of the editor. If the browser does not support the new version, it will automatically be downgraded to the old version of the editor.';
$extra['文件上传到本地服务器的 `static/upload` 目录,不支持大文件上传,占用服务器磁盘空间,访问时消耗服务器带宽流量。'] = 'Uploading files to the `static/upload` directory of the local server does not support uploading large files, occupying server disk space, and consuming server bandwidth traffic during access.';
$extra['文件上传到 Alist 存储的服务器或云存储空间,根据服务配置可支持大文件上传,不占用本身服务器空间及服务器带宽流量。'] = 'Files can be uploaded to the Alist storage server or Cloud storage space. According to the service configuration, large file upload can be supported without occupying the server space and server bandwidth traffic.';
@ -197,4 +198,196 @@ return array_merge($extra, [
'系统用户' => 'System User',
'密 码' => 'Password',
'系统用户管理' => 'Users',
// 通用操作
'回 收 站' => 'Recycle Bin',
'排序权重' => 'Sort Weight',
'使用状态' => 'Status',
'操作面板' => 'Actions',
'已激活' => 'Activated',
'已禁用' => 'Disabled',
'已启用' => 'Enabled',
'添 加' => 'Add',
'编 辑' => 'Edit',
'删 除' => 'Delete',
'全部' => 'All',
'搜 索' => 'Search',
'导 出' => 'Export',
'保存数据' => 'Save Data',
'取消编辑' => 'Cancel Edit',
'操作日志' => 'Operation Log',
'创建时间' => 'Create Time',
// 用户管理
'批量禁用' => 'Batch Disable',
'批量恢复' => 'Batch Restore',
'编辑用户' => 'Edit User',
'设置密码' => 'Set Password',
'角色身份' => 'Role Identity',
'全部菜单' => 'All Menus',
// 权限管理
'确定要批量删除权限吗?' => 'Are you sure you want to batch delete permissions?',
'确定要删除权限吗?' => 'Are you sure you want to delete the permission?',
'功能节点' => 'Function Node',
'访问权限名称需要保持不重复,在给用户授权时需要根据名称选择!' => 'Access permission names must be unique. When authorizing users, select based on the name!',
'已禁用记录' => 'Disabled Records',
'已激活记录' => 'Activated Records',
// 菜单管理
'确定要删除菜单吗?' => 'Are you sure you want to delete the menu?',
'添加系统菜单' => 'Add System Menu',
'编辑系统菜单' => 'Edit System Menu',
// 文件管理
'确定删除这些记录吗?' => 'Are you sure you want to delete these records?',
'播放视频' => 'Play Video',
'播放音频' => 'Play Audio',
'查看下载' => 'View/Download',
'编辑文件信息' => 'Edit File Info',
// 任务管理
'确定批量删除记录吗?' => 'Are you sure you want to batch delete records?',
'确定要重置该任务吗?' => 'Are you sure you want to reset this task?',
'确定要删除该记录吗?' => 'Are you sure you want to delete this record?',
'请选择计划时间' => 'Please select scheduled time',
'请输入名称或编号' => 'Please enter name or code',
'请输入任务指令' => 'Please enter task command',
// 确认提示
'确定要永久删除吗?' => 'Are you sure you want to permanently delete?',
'确定要取消编辑吗?' => 'Are you sure you want to cancel editing?',
'确定要取消修改吗?' => 'Are you sure you want to cancel the modification?',
'确定要禁用这些用户吗?' => 'Are you sure you want to disable these users?',
'确定要恢复这些账号吗?' => 'Are you sure you want to restore these accounts?',
'确定永久删除这些账号吗?' => 'Are you sure you want to permanently delete these accounts?',
// 系统提示
'新增类型' => 'New Type',
'只有超级管理员才能操作!' => 'Only super administrators can operate!',
'日志清理失败,%s' => 'Log cleanup failed, %s',
'已存在 %s 应用!' => 'Application %s already exists!',
// 演示环境提示
'演示环境禁止修改用户密码!' => 'Demo environment prohibits modifying user passwords!',
'演示环境禁止修改系统配置!' => 'Demo environment prohibits modifying system configuration!',
'演示环境禁止给菜单排序!' => 'Demo environment prohibits menu sorting!',
'演示环境禁止添加菜单!' => 'Demo environment prohibits adding menus!',
'演示环境禁止编辑菜单!' => 'Demo environment prohibits editing menus!',
'演示环境禁止禁用菜单!' => 'Demo environment prohibits disabling menus!',
'演示环境禁止删除菜单!' => 'Demo environment prohibits deleting menus!',
'演示环境禁止修改密码!' => 'Demo environment prohibits modifying passwords!',
// 表单字段
'用户账号' => 'User Account',
'用户权限' => 'User Permissions',
'用户资料' => 'User Profile',
'登录账号' => 'Login Account',
'用户名称' => 'User Name',
'角色身份' => 'Role Identity',
'访问权限' => 'Access Permissions',
'联系邮箱' => 'Contact Email',
'联系手机' => 'Contact Mobile',
'联系QQ' => 'Contact QQ',
'用户描述' => 'User Description',
'登录用户账号' => 'Login Username',
'旧的登录密码' => 'Old Password',
'新的登录密码' => 'New Password',
'重复登录密码' => 'Repeat Password',
'验证密码' => 'Verify Password',
'登录密码' => 'Login Password',
'重复密码' => 'Repeat Password',
// 表单提示
'登录账号不能少于4位字符创建后不能再次修改.' => 'Login account must be at least 4 characters and cannot be modified after creation.',
'用于区分用户数据的用户名称,请尽量不要重复.' => 'User name used to distinguish user data, please try not to duplicate.',
'超级用户拥所有访问权限,不需要配置权限。' => 'Super users have all access permissions and do not need to configure permissions.',
'可选,请填写用户常用的电子邮箱' => 'Optional, please fill in the user\'s commonly used email address',
'可选,请填写用户常用的联系手机号' => 'Optional, please fill in the user\'s commonly used mobile phone number',
'可选,请填写用户常用的联系QQ号' => 'Optional, please fill in the user\'s commonly used QQ number',
'请输入用户描述' => 'Please enter user description',
'登录用户账号创建后,不允许再次修改。' => 'Login username cannot be modified after creation.',
'请输入旧密码来验证修改权限,旧密码不限制格式。' => 'Please enter the old password to verify modification permission. The old password format is not restricted.',
'密码必须包含大小写字母、数字、符号的任意两者组合。' => 'Password must contain any combination of uppercase letters, lowercase letters, numbers, and symbols.',
'请重复输入登录密码' => 'Please repeat the login password',
// 系统配置表单
'登录表单标题' => 'Login Form Title',
'后台登录入口' => 'Backend Login Entry',
'后台默认配色' => 'Backend Default Theme',
'登录背景图片' => 'Login Background Image',
'JWT 接口密钥' => 'JWT API Key',
'浏览器小图标' => 'Browser Icon',
'后台程序名称' => 'Backend Program Name',
'后台程序版本' => 'Backend Program Version',
'公安安备号' => 'Public Security Registration Number',
'保存配置' => 'Save Configuration',
'取消修改' => 'Cancel Modification',
'登录标题' => 'Login Title',
'登录入口' => 'Login Entry',
'接口密钥' => 'API Key',
'图标文件' => 'Icon File',
'程序名称' => 'Program Name',
'版权信息' => 'Copyright Information',
// 菜单表单提示
'必选' => 'Required',
'可选' => 'Optional',
'请选择上级菜单或顶级菜单 ( 目前最多支持三级菜单 )' => 'Please select parent menu or top-level menu (currently supports up to 3 levels)',
'请填写菜单名称 ( 如:系统管理 ),建议字符不要太长,一般 4-6 个汉字' => 'Please fill in the menu name (e.g., System Management), it is recommended not to be too long, generally 4-6 Chinese characters',
'请填写链接地址或选择系统节点 ( 如https://domain.com/admin/user/index.html 或 admin/user/index )' => 'Please fill in the link address or select a system node (e.g., https://domain.com/admin/user/index.html or admin/user/index)',
'当填写链接地址时,以下面的 "权限节点" 来判断菜单自动隐藏或显示,注意未填写 "权限节点" 时将不会隐藏该菜单哦' => 'When filling in the link address, use the "Permission Node" below to determine whether the menu is automatically hidden or displayed. Note that if the "Permission Node" is not filled in, the menu will not be hidden',
'设置菜单链接的 GET 访问参数 ( 如name=1&age=3 )' => 'Set GET access parameters for menu links (e.g., name=1&age=3)',
'请填写系统权限节点 ( 如admin/user/index ),未填写时默认解释"菜单链接"判断是否拥有访问权限;' => 'Please fill in the system permission node (e.g., admin/user/index). If not filled in, the "Menu Link" will be used by default to determine access permissions',
'设置菜单选项前置图标,目前支持 layui 字体图标及 iconfont 定制字体图标。' => 'Set the prefix icon for menu options. Currently supports layui font icons and iconfont custom font icons.',
'请输入或选择图标' => 'Please enter or select an icon',
'请输入菜单名称' => 'Please enter menu name',
'请输入菜单链接' => 'Please enter menu link',
'请输入链接参数' => 'Please enter link parameters',
'请输入权限节点' => 'Please enter permission node',
'请输入登录账号' => 'Please enter login account',
'请输入用户名称' => 'Please enter user name',
'请输入联系电子邮箱' => 'Please enter contact email',
'请输入用户联系手机' => 'Please enter user contact mobile',
'请输入常用的联系QQ' => 'Please enter commonly used contact QQ',
'请输入旧的登录密码' => 'Please enter old login password',
'请输入新的登录密码' => 'Please enter new login password',
// 系统配置表单提示
'请输入登录页面的表单标题' => 'Please enter login form title',
'后台登录入口是由英文字母开头,且不能有相同名称的模块,设置之后原地址不能继续访问,请谨慎配置 ~' => 'Backend login entry must start with English letters and cannot have modules with the same name. After setting, the original address cannot be accessed. Please configure carefully.',
'请输入32位JWT接口密钥' => 'Please enter 32-bit JWT API key',
'请输入 32 位 JWT 接口密钥,在使用 JWT 接口时需要使用此密钥进行加密及签名!' => 'Please enter a 32-bit JWT API key. This key is required for encryption and signing when using JWT interfaces!',
'请上传浏览器图标' => 'Please upload browser icon',
'建议上传 128x128 或 256x256 的 JPG,PNG,JPEG 图片,保存后会自动生成 48x48 的 ICO 文件 ~' => 'It is recommended to upload JPG, PNG, or JPEG images of 128x128 or 256x256. After saving, a 48x48 ICO file will be automatically generated.',
'请输入网站名称' => 'Please enter site name',
'网站名称将显示在浏览器的标签上 ~' => 'Site name will be displayed on the browser tab.',
'请输入程序名称' => 'Please enter program name',
'管理程序名称显示在后台左上标题处 ~' => 'Management program name is displayed in the top left title of the backend.',
'请输入程序版本' => 'Please enter program version',
'管理程序版本显示在后台左上标题处 ~' => 'Management program version is displayed in the top left title of the backend.',
'请输入公安安备号' => 'Please enter public security registration number',
'请输入网站备案号' => 'Please enter website registration number',
'请输入版权信息' => 'Please enter copyright information',
'网站备案号和公安备案号可以在<a target="_blank" href="https://beian.miit.gov.cn">备案管理中心</a>查询并获取,网站上线时必需配置备案号,备案号会链接到信息备案管理系统 ~' => 'Website registration number and public security registration number can be queried and obtained at the <a target="_blank" href="https://beian.miit.gov.cn">Registration Management Center</a>. Registration numbers must be configured when the website goes online, and will be linked to the information registration management system.',
// 数据字典表单提示
'数据类型' => 'Data Type',
'请选择数据类型,数据创建后不能再次修改哦 ~' => 'Please select data type. Data type cannot be modified after creation.',
'请输入数据类型' => 'Please enter data type',
'请输入新的数据类型,数据创建后不能再次修改哦 ~' => 'Please enter new data type. Data type cannot be modified after creation.',
'数据编码' => 'Data Code',
'请输入新的数据编码,数据创建后不能再次修改,同种数据类型的数据编码不能出现重复 ~' => 'Please enter new data code. Data code cannot be modified after creation, and duplicate codes are not allowed for the same data type.',
'数据名称' => 'Data Name',
'请输入当前数据名称,请尽量保持名称的唯一性,数据名称尽量不要出现重复 ~' => 'Please enter data name. Try to keep the name unique and avoid duplicates.',
'数据内容' => 'Data Content',
'请输入数据内容' => 'Please enter data content',
// 数据字典列表
'添加数据' => 'Add Data',
'确定要批量删除数据吗?' => 'Are you sure you want to batch delete data?',
'数据状态' => 'Data Status',
'数据操作' => 'Actions',
'编辑数据' => 'Edit Data',
'确定要删除数据吗?' => 'Are you sure you want to delete data?',
]);

View File

@ -3,7 +3,7 @@
<div class="layui-card-body padding-left-40">
<div class="layui-form-item label-required-prev">
<div class="help-label"><b>数据类型</b>Data Type</div>
<div class="help-label"><b>{:lang('数据类型')}</b>Data Type</div>
{if isset($vo.type)}
<label><input readonly value="{$vo.type|default=''}" class="layui-input think-bg-gray"></label>
{else}
@ -27,32 +27,32 @@
});
</script>
{/if}
<p class="help-block">请选择数据类型,数据创建后不能再次修改哦 ~</p>
<p class="help-block">{:lang('请选择数据类型,数据创建后不能再次修改哦 ~')}</p>
<div id="DataTypeInput" class="layui-hide relative">
<input class="layui-input" maxlength="20" name="type" required vali-name="数据类型" placeholder="请输入数据类型" value="{$vo.type|default=''}">
<p class="help-block">请输入新的数据类型,数据创建后不能再次修改哦 ~</p>
<input class="layui-input" maxlength="20" name="type" required vali-name="{:lang('数据类型')}" placeholder="{:lang('请输入数据类型')}" value="{$vo.type|default=''}">
<p class="help-block">{:lang('请输入新的数据类型,数据创建后不能再次修改哦 ~')}</p>
</div>
</div>
<label class="layui-form-item relative block">
<span class="help-label"><b>数据编码</b>Data Code</span>
<span class="help-label"><b>{:lang('数据编码')}</b>Data Code</span>
{if isset($vo.code)}
<input readonly maxlength="100" class="layui-input think-bg-gray" name="code" value='{$vo.code|default=""}' required placeholder="请输入数据编码">
<input readonly maxlength="100" class="layui-input think-bg-gray" name="code" value='{$vo.code|default=""}' required placeholder="{:lang('请输入数据编码')}">
{else}
<input maxlength="100" class="layui-input" name="code" value='{$vo.code|default=""}' required vali-name="数据编码" placeholder="请输入数据编码">
<input maxlength="100" class="layui-input" name="code" value='{$vo.code|default=""}' required vali-name="{:lang('数据编码')}" placeholder="{:lang('请输入数据编码')}">
{/if}
<span class="help-block">请输入新的数据编码,数据创建后不能再次修改,同种数据类型的数据编码不能出现重复 ~</span>
<span class="help-block">{:lang('请输入新的数据编码,数据创建后不能再次修改,同种数据类型的数据编码不能出现重复 ~')}</span>
</label>
<label class="layui-form-item relative block">
<span class="help-label"><b>数据名称</b>Data Name</span>
<input maxlength="500" class="layui-input" name="name" value='{$vo.name|default=""}' required vali-name="数据名称" placeholder="请输入数据名称">
<span class="help-block">请输入当前数据名称,请尽量保持名称的唯一性,数据名称尽量不要出现重复 ~</span>
<span class="help-label"><b>{:lang('数据名称')}</b>Data Name</span>
<input maxlength="500" class="layui-input" name="name" value='{$vo.name|default=""}' required vali-name="{:lang('数据名称')}" placeholder="{:lang('请输入数据名称')}">
<span class="help-block">{:lang('请输入当前数据名称,请尽量保持名称的唯一性,数据名称尽量不要出现重复 ~')}</span>
</label>
<label class="layui-form-item relative block">
<span class="help-label"><b>数据内容</b>Data Content</span>
<textarea name="content" class="layui-textarea" placeholder="请输入数据内容">{$vo.content|default=''}</textarea>
<span class="help-label"><b>{:lang('数据内容')}</b>Data Content</span>
<textarea name="content" class="layui-textarea" placeholder="{:lang('请输入数据内容')}">{$vo.content|default=''}</textarea>
</label>
</div>
@ -61,8 +61,8 @@
{notempty name='vo.id'}<input type='hidden' value='{$vo.id}' name='id'>{/notempty}
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="确定要取消编辑吗?" data-close>取消编辑</button>
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="{:lang('确定要取消编辑吗?')}" data-close>{:lang('取消编辑')}</button>
</div>
</form>

View File

@ -2,11 +2,11 @@
{block name="button"}
<!--{if auth("add")}-->
<button data-table-id="BaseTable" data-modal='{:url("add")}?type={$type|default=""}' class='layui-btn layui-btn-sm layui-btn-primary'>添加数据</button>
<button data-table-id="BaseTable" data-modal='{:url("add")}?type={$type|default=""}' class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('添加数据')}</button>
<!--{/if}-->
<!--{if auth("remove")}-->
<button data-table-id="BaseTable" data-action='{:url("remove")}' data-rule="id#{id}" data-confirm="确定要批量删除数据吗?" class='layui-btn layui-btn-sm layui-btn-primary'>批量删除</button>
<button data-table-id="BaseTable" data-action='{:url("remove")}' data-rule="id#{id}" data-confirm="{:lang('确定要批量删除数据吗?')}" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('批量删除')}</button>
<!--{/if}-->
{/block}
@ -38,11 +38,11 @@
{checkbox: true, fixed: true},
{field: 'sort', title: '{:lang("排序权重")}', width: 100, align: 'center', sort: true, templet: '#SortInputTpl'},
// {field: 'type', title: '数据类型', minWidth: 140, align: 'center'},
{field: 'code', title: '数据编码', width: '20%', align: 'left'},
{field: 'name', title: '数据名称', width: '30%', align: 'left'},
{field: 'status', title: '数据状态', minWidth: 110, align: 'center', templet: '#StatusSwitchTpl'},
{field: 'create_at', title: '创建时间', minWidth: 170, align: 'center', sort: true},
{toolbar: '#toolbar', align: 'center', minWidth: 150, title: '数据操作', fixed: 'right'},
{field: 'code', title: '{:lang("数据编码")}', width: '20%', align: 'left'},
{field: 'name', title: '{:lang("数据名称")}', width: '30%', align: 'left'},
{field: 'status', title: '{:lang("数据状态")}', minWidth: 110, align: 'center', templet: '#StatusSwitchTpl'},
{field: 'create_at', title: '{:lang("创建时间")}', minWidth: 170, align: 'center', sort: true},
{toolbar: '#toolbar', align: 'center', minWidth: 150, title: '{:lang("数据操作")}', fixed: 'right'},
]]
});
@ -67,20 +67,20 @@
<!-- 数据状态切换模板 -->
<script type="text/html" id="StatusSwitchTpl">
<!--{if auth("state")}-->
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="已激活|已禁用" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="{:lang('已激活')}|{:lang('已禁用')}" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<!--{else}-->
{{-d.status ? '<b class="color-green">已启用</b>' : '<b class="color-red">已禁用</b>'}}
{{-d.status ? '<b class="color-green">{:lang("已启用")}</b>' : '<b class="color-red">{:lang("已禁用")}</b>'}}
<!--{/if}-->
</script>
<!-- 数据操作工具条模板 -->
<script type="text/html" id="toolbar">
<!--{if auth('edit')}-->
<a class="layui-btn layui-btn-primary layui-btn-sm" data-event-dbclick data-title="编辑数据" data-modal='{:url("edit")}?id={{d.id}}'> </a>
<a class="layui-btn layui-btn-primary layui-btn-sm" data-event-dbclick data-title="{:lang('编辑数据')}" data-modal='{:url("edit")}?id={{d.id}}'>{:lang('编 辑')}</a>
<!--{/if}-->
<!--{if auth("remove")}-->
<a class="layui-btn layui-btn-danger layui-btn-sm" data-confirm="确定要删除数据吗?" data-action="{:url('remove')}" data-value="id#{{d.id}}"> </a>
<a class="layui-btn layui-btn-danger layui-btn-sm" data-confirm="{:lang('确定要删除数据吗?')}" data-action="{:url('remove')}" data-value="id#{{d.id}}">{:lang('删 除')}</a>
<!--{/if}-->
</script>
{/block}

View File

@ -4,19 +4,19 @@
<div class="layui-row layui-col-space15 margin-bottom-5">
<div class="layui-col-xs4 padding-bottom-0">
<label class="relative block">
<span class="help-label"><b>登录表单标题</b>Login Name</span>
<input name="login_name" required placeholder="请输入登录页面的表单标题" vali-name="登录标题" value="{:sysconf('login_name')?:'系统管理'}" class="layui-input">
<span class="help-label"><b>{:lang('登录表单标题')}</b>Login Name</span>
<input name="login_name" required placeholder="{:lang('请输入登录页面的表单标题')}" vali-name="{:lang('登录标题')}" value="{:sysconf('login_name')?:'系统管理'}" class="layui-input">
</label>
</div>
<div class="layui-col-xs4 padding-bottom-0">
<div class="help-label label-required-prev"><b>后台登录入口</b>Login Entry</div>
<div class="help-label label-required-prev"><b>{:lang('后台登录入口')}</b>Login Entry</div>
<label class="layui-input relative block nowrap label-required-null">
<span>{:sysuri('@',[],false,true)}</span>
<input autofocus required pattern="[a-zA-Z_][a-zA-Z0-9_]*" vali-name="登录入口" placeholder="请输入后台登录入口" class="layui-input inline-block padding-0 border-0" style="width:100px;background:none" value="{:substr(sysuri('admin/index/index',[],false), strlen(sysuri('@')))}" name="xpath">
<input autofocus required pattern="[a-zA-Z_][a-zA-Z0-9_]*" vali-name="{:lang('登录入口')}" placeholder="{:lang('请输入后台登录入口')}" class="layui-input inline-block padding-0 border-0" style="width:100px;background:none" value="{:substr(sysuri('admin/index/index',[],false), strlen(sysuri('@')))}" name="xpath">
</label>
</div>
<div class="layui-col-xs4 padding-bottom-0">
<div class="help-label label-required-prev"><b>后台默认配色</b>Theme Style</div>
<div class="help-label label-required-prev"><b>{:lang('后台默认配色')}</b>Theme Style</div>
<select class="layui-select" name="site_theme" lay-filter="SiteTheme">
{foreach $themes as $k=>$v}{if sysconf('base.site_theme') eq $k}
<option selected value="{$k}">{$v}</option>
@ -26,89 +26,89 @@
</select>
</div>
<div class="layui-col-xs12 padding-top-0 padding-bottom-0">
<span class="help-block">后台登录入口是由英文字母开头,且不能有相同名称的模块,设置之后原地址不能继续访问,请谨慎配置 ~</span>
<span class="help-block">{:lang('后台登录入口是由英文字母开头,且不能有相同名称的模块,设置之后原地址不能继续访问,请谨慎配置 ~')}</span>
</div>
</div>
<div class="layui-form-item margin-bottom-5">
<div class="help-label"><b>登录背景图片</b>Background Image</div>
<div class="help-label"><b>{:lang('登录背景图片')}</b>Background Image</div>
<div class="layui-textarea help-images">
<input type="hidden" value="{:sysconf('login_image')}" name="login_image">
</div>
</div>
<div class="layui-form-item margin-bottom-5">
<div class="help-label label-required-prev"><b>JWT 接口密钥</b>Jwt Key</div>
<div class="help-label label-required-prev"><b>{:lang('JWT 接口密钥')}</b>Jwt Key</div>
<label class="relative block label-required-null">
<input class="layui-input" pattern=".{32}" maxlength="32" required vali-name="接口密钥" placeholder="请输入32位JWT接口密钥" name="data.jwtkey" value="{:sysconf('data.jwtkey')?:md5(uniqid(strval(rand(1000,9999)),true))}">
<input class="layui-input" pattern=".{32}" maxlength="32" required vali-name="{:lang('接口密钥')}" placeholder="{:lang('请输入32位JWT接口密钥')}" name="data.jwtkey" value="{:sysconf('data.jwtkey')?:md5(uniqid(strval(rand(1000,9999)),true))}">
<a class="input-right-icon layui-icon layui-icon-refresh" id="RefreshJwtKey"></a>
</label>
<div class="help-block sub-span-blue">
请输入 <span>32</span> <span>JWT</span> 接口密钥,在使用 <span>JWT</span> 接口时需要使用此密钥进行加密及签名!
{:lang('请输入 32 位 JWT 接口密钥,在使用 JWT 接口时需要使用此密钥进行加密及签名!')}
</div>
</div>
<div class="layui-form-item margin-bottom-5">
<div class="help-label label-required-prev"><b>浏览器小图标</b>Browser Icon</div>
<div class="help-label label-required-prev"><b>{:lang('浏览器小图标')}</b>Browser Icon</div>
<div class="relative block label-required-null">
<input class="layui-input" required pattern="url" vali-name="图标文件" data-tips-image data-tips-hover placeholder="请上传浏览器图标" value="{:sysconf('site_icon')}" name="site_icon">
<input class="layui-input" required pattern="url" vali-name="{:lang('图标文件')}" data-tips-image data-tips-hover placeholder="{:lang('请上传浏览器图标')}" value="{:sysconf('site_icon')}" name="site_icon">
<a class="input-right-icon layui-icon layui-icon-upload-drag" data-file="btn" data-type="png,jpg,jpeg" data-field="site_icon"></a>
</div>
<div class="help-block sub-span-blue">
建议上传 <span>128x128</span> <span>256x256</span> <span>JPG</span>,<span>PNG</span>,<span>JPEG</span> 图片,保存后会自动生成 <span>48x48</span> <span>ICO</span> 文件 ~
{:lang('建议上传 128x128 或 256x256 的 JPG,PNG,JPEG 图片,保存后会自动生成 48x48 的 ICO 文件 ~')}
</div>
</div>
<div class="layui-row layui-col-space15 margin-bottom-5">
<div class="layui-col-xs4 padding-bottom-0">
<label class="layui-form-item margin-bottom-5 relative block">
<span class="help-label"><b>网站名称</b>Site Name</span>
<input name="site_name" required placeholder="请输入网站名称" vali-name="网站名称" value="{:sysconf('site_name')}" class="layui-input">
<span class="help-block">网站名称将显示在浏览器的标签上 ~</span>
<span class="help-label"><b>{:lang('网站名称')}</b>Site Name</span>
<input name="site_name" required placeholder="{:lang('请输入网站名称')}" vali-name="{:lang('网站名称')}" value="{:sysconf('site_name')}" class="layui-input">
<span class="help-block">{:lang('网站名称将显示在浏览器的标签上 ~')}</span>
</label>
</div>
<div class="layui-col-xs4 padding-bottom-0">
<label class="layui-form-item margin-bottom-5 relative block">
<span class="help-label"><b>后台程序名称</b>App Name</span>
<input name="app_name" required placeholder="请输入程序名称" vali-name="程序名称" value="{:sysconf('app_name')}" class="layui-input">
<span class="help-block">管理程序名称显示在后台左上标题处 ~</span>
<span class="help-label"><b>{:lang('后台程序名称')}</b>App Name</span>
<input name="app_name" required placeholder="{:lang('请输入程序名称')}" vali-name="{:lang('程序名称')}" value="{:sysconf('app_name')}" class="layui-input">
<span class="help-block">{:lang('管理程序名称显示在后台左上标题处 ~')}</span>
</label>
</div>
<div class="layui-col-xs4 padding-bottom-0">
<label class="layui-form-item margin-bottom-5 relative block">
<span class="help-label"><b>后台程序版本</b>App Version</span>
<input name="app_version" placeholder="请输入程序版本" value="{:sysconf('app_version')}" class="layui-input">
<span class="help-block">管理程序版本显示在后台左上标题处 ~</span>
<span class="help-label"><b>{:lang('后台程序版本')}</b>App Version</span>
<input name="app_version" placeholder="{:lang('请输入程序版本')}" value="{:sysconf('app_version')}" class="layui-input">
<span class="help-block">{:lang('管理程序版本显示在后台左上标题处 ~')}</span>
</label>
</div>
<div class="layui-col-xs4 padding-top-0 padding-bottom-0">
<label class="relative block">
<span class="help-label"><b>公安安备号</b>Beian</span>
<input name="beian" placeholder="请输入公安安备号" value="{:sysconf('beian')}" class="layui-input">
<span class="help-label"><b>{:lang('公安安备号')}</b>Beian</span>
<input name="beian" placeholder="{:lang('请输入公安安备号')}" value="{:sysconf('beian')}" class="layui-input">
</label>
</div>
<div class="layui-col-xs4 padding-top-0 padding-bottom-0">
<label class="relative block">
<span class="help-label"><b>网站备案号</b>Miitbeian</span>
<input name="miitbeian" placeholder="请输入网站备案号" value="{:sysconf('miitbeian')}" class="layui-input">
<span class="help-label"><b>{:lang('网站备案号')}</b>Miitbeian</span>
<input name="miitbeian" placeholder="{:lang('请输入网站备案号')}" value="{:sysconf('miitbeian')}" class="layui-input">
</label>
</div>
<div class="layui-col-xs4 padding-top-0 padding-bottom-0">
<label class="relative block">
<span class="help-label"><b>网站版权信息</b>Copyright</span>
<input name="site_copy" required placeholder="请输入版权信息" vali-name="版权信息" value="{:sysconf('site_copy')}" class="layui-input">
<span class="help-label"><b>{:lang('网站版权信息')}</b>Copyright</span>
<input name="site_copy" required placeholder="{:lang('请输入版权信息')}" vali-name="{:lang('版权信息')}" value="{:sysconf('site_copy')}" class="layui-input">
</label>
</div>
<div class="layui-col-xs12 help-block padding-top-0">
网站备案号和公安备案号可以在<a target="_blank" href="https://beian.miit.gov.cn">备案管理中心</a>查询并获取,网站上线时必需配置备案号,备案号会链接到信息备案管理系统 ~
{:lang('网站备案号和公安备案号可以在<a target="_blank" href="https://beian.miit.gov.cn">备案管理中心</a>查询并获取,网站上线时必需配置备案号,备案号会链接到信息备案管理系统 ~')}
</div>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="layui-form-item text-center">
<button class="layui-btn" type="submit">保存配置</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="确定要取消修改吗?" data-close>取消修改</button>
<button class="layui-btn" type="submit">{:lang('保存配置')}</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="{:lang('确定要取消修改吗?')}" data-close>{:lang('取消修改')}</button>
</div>
</form>

View File

@ -12,25 +12,25 @@
<option value='{$menu.id}'>{$menu.spl|raw}{$menu.title}</option>
{/eq}{/foreach}
</select>
<p class="help-block"><b>必选</b>请选择上级菜单或顶级菜单 ( 目前最多支持三级菜单 )</p>
<p class="help-block"><b>{:lang('必选')}</b>{:lang('请选择上级菜单或顶级菜单 ( 目前最多支持三级菜单 )')}</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{:lang('菜单名称')}</label>
<div class="layui-input-block">
<input name="title" value='{$vo.title|default=""}' required vali-name="菜单名称" placeholder="请输入菜单名称" class="layui-input">
<p class="help-block"><b>必选</b>请填写菜单名称 ( 如:系统管理 ),建议字符不要太长,一般 4-6 个汉字</p>
<input name="title" value='{$vo.title|default=""}' required vali-name="{:lang('菜单名称')}" placeholder="{:lang('请输入菜单名称')}" class="layui-input">
<p class="help-block"><b>{:lang('必选')}</b>{:lang('请填写菜单名称 ( 如:系统管理 ),建议字符不要太长,一般 4-6 个汉字')}</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{:lang('菜单链接')}</label>
<div class="layui-input-block">
<input onblur="this.value=this.value === ''?'#':this.value" name="url" required vali-name="菜单链接" placeholder="请输入菜单链接" value="{$vo.url|default='#'}" class="layui-input">
<input onblur="this.value=this.value === ''?'#':this.value" name="url" required vali-name="{:lang('菜单链接')}" placeholder="{:lang('请输入菜单链接')}" value="{$vo.url|default='#'}" class="layui-input">
<p class="help-block">
<b>必选</b>请填写链接地址或选择系统节点 ( https://domain.com/admin/user/index.html admin/user/index )
<br>当填写链接地址时,以下面的 “权限节点” 来判断菜单自动隐藏或显示,注意未填写 “权限节点” 时将不会隐藏该菜单哦
<b>{:lang('必选')}</b>{:lang('请填写链接地址或选择系统节点 ( 如https://domain.com/admin/user/index.html 或 admin/user/index )')}
<br>{:lang('当填写链接地址时,以下面的 "权限节点" 来判断菜单自动隐藏或显示,注意未填写 "权限节点" 时将不会隐藏该菜单哦')}
</p>
</div>
</div>
@ -38,16 +38,16 @@
<div class="layui-form-item">
<label class="layui-form-label">{:lang('链接参数')}</label>
<div class="layui-input-block">
<input name="params" placeholder="请输入链接参数" value="{$vo.params|default=''}" class="layui-input">
<p class="help-block"><b>可选</b>设置菜单链接的 GET 访问参数 ( name=1&age=3 )</p>
<input name="params" placeholder="{:lang('请输入链接参数')}" value="{$vo.params|default=''}" class="layui-input">
<p class="help-block"><b>{:lang('可选')}</b>{:lang('设置菜单链接的 GET 访问参数 ( 如name=1&age=3 )')}</p>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{:lang('权限节点')}</label>
<div class="layui-input-block">
<input name="node" placeholder="请输入权限节点" value="{$vo.node|default=''}" class="layui-input">
<p class="help-block"><b>可选</b>请填写系统权限节点 ( admin/user/index ),未填写时默认解释"菜单链接"判断是否拥有访问权限;</p>
<input name="node" placeholder="{:lang('请输入权限节点')}" value="{$vo.node|default=''}" class="layui-input">
<p class="help-block"><b>{:lang('可选')}</b>{:lang('请填写系统权限节点 ( 如admin/user/index ),未填写时默认解释"菜单链接"判断是否拥有访问权限;')}</p>
</div>
</div>
@ -55,13 +55,13 @@
<label class="layui-form-label">{:lang('菜单图标')}</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input placeholder="请输入或选择图标" name="icon" value='{$vo.icon|default=""}' class="layui-input">
<input placeholder="{:lang('请输入或选择图标')}" name="icon" value='{$vo.icon|default=""}' class="layui-input">
</div>
<span style="padding:0 12px;min-width:45px" class='layui-btn layui-btn-primary'>
<i style="font-size:1.2em;margin:0;float:none" class='{$vo.icon|default=""}'></i>
</span>
<button data-icon='icon' type='button' class='layui-btn layui-btn-primary'>{:lang('选择图标')}</button>
<p class="help-block"><b>可选</b>设置菜单选项前置图标,目前支持 layui 字体图标及 iconfont 定制字体图标。</p>
<p class="help-block"><b>{:lang('可选')}</b>{:lang('设置菜单选项前置图标,目前支持 layui 字体图标及 iconfont 定制字体图标。')}</p>
</div>
</div>

View File

@ -108,9 +108,9 @@
<!-- {else} -->
{if auth('remove')}
{{# if( (d.spc<1 || d.status<1)){ }}
<a class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="确定要删除菜单吗?" data-action="{:url('remove')}" data-value="id#{{d.sps}}"> </a>
<a class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="{:lang('确定要删除菜单吗?')}" data-action="{:url('remove')}" data-value="id#{{d.sps}}">{:lang('删 除')}</a>
{{# }else{ }}
<a class="layui-btn layui-btn-disabled layui-btn-sm"> </a>
<a class="layui-btn layui-btn-disabled layui-btn-sm">{:lang('删 除')}</a>
{{# } }}
{/if}
<!-- {/if} -->

View File

@ -2,7 +2,7 @@
<div class="layui-card-body padding-left-40">
<fieldset class="layui-bg-gray">
<legend><b class="layui-badge think-bg-violet">用户账号</b></legend>
<legend><b class="layui-badge think-bg-violet">{:lang('用户账号')}</b></legend>
<div class="layui-row layui-col-space15">
<div class="layui-col-xs2 text-center padding-top-15">
@ -11,20 +11,20 @@
</div>
<div class="layui-col-xs5">
<label class="block relative">
<span class="help-label"><b>登录账号</b>User Name</span>
<span class="help-label"><b>{:lang('登录账号')}</b>User Name</span>
{if isset($vo) and isset($vo.username)}
<input name="username" value='{$vo.username|default=""}' required readonly class="layui-input think-bg-gray">
{else}
<input name="username" value='{$vo.username|default=""}' required pattern="^.{4,}$" vali-name="登录账号" placeholder="请输入登录账号" class="layui-input">
<input name="username" value='{$vo.username|default=""}' required pattern="^.{4,}$" vali-name="{:lang('登录账号')}" placeholder="{:lang('请输入登录账号')}" class="layui-input">
{/if}
<span class="help-block">登录账号不能少于4位字符创建后不能再次修改.</span>
<span class="help-block">{:lang('登录账号不能少于4位字符创建后不能再次修改.')}</span>
</label>
</div>
<div class="layui-col-xs5">
<label class="block relative">
<span class="help-label"><b>用户名称</b>Nick Name</span>
<input name="nickname" value='{$vo.nickname|default=""}' required vali-name="用户名称" placeholder="请输入用户名称" class="layui-input">
<span class="help-block">用于区分用户数据的用户名称,请尽量不要重复.</span>
<span class="help-label"><b>{:lang('用户名称')}</b>Nick Name</span>
<input name="nickname" value='{$vo.nickname|default=""}' required vali-name="{:lang('用户名称')}" placeholder="{:lang('请输入用户名称')}" class="layui-input">
<span class="help-block">{:lang('用于区分用户数据的用户名称,请尽量不要重复.')}</span>
</label>
</div>
</div>
@ -33,10 +33,10 @@
{if !empty($bases) || !empty($auths)}
<fieldset class="layui-bg-gray">
<legend><b class="layui-badge think-bg-violet">用户权限</b></legend>
<legend><b class="layui-badge think-bg-violet">{:lang('用户权限')}</b></legend>
{if !empty($bases)}
<div class="layui-form-item">
<div class="help-label"><b>角色身份</b>Role Identity</div>
<div class="help-label"><b>{:lang('角色身份')}</b>Role Identity</div>
<div class="layui-textarea help-checks">
{foreach $bases as $base}
<label class="think-checkbox">
@ -52,10 +52,10 @@
{/if}
{if !empty($auths)}
<div class="layui-form-item">
<div class="help-label"><b>访问权限</b>Role Permission</div>
<div class="help-label"><b>{:lang('访问权限')}</b>Role Permission</div>
<div class="layui-textarea help-checks">
{if isset($vo.username) and $vo.username eq $super}
<span class="color-desc padding-left-5">超级用户拥所有访问权限,不需要配置权限。</span>
<span class="color-desc padding-left-5">{:lang('超级用户拥所有访问权限,不需要配置权限。')}</span>
{else}{foreach $auths as $authorize}
<label class="think-checkbox">
{if in_array($authorize.id, $vo.authorize)}
@ -72,33 +72,33 @@
{/if}
<fieldset class="layui-bg-gray">
<legend><b class="layui-badge think-bg-violet">用户资料</b></legend>
<legend><b class="layui-badge think-bg-violet">{:lang('用户资料')}</b></legend>
<div class="layui-row layui-col-space15">
<div class="layui-col-xs4">
<label class="relative block">
<span class="help-label"><b>联系邮箱</b>Contact Email</span>
<input name="contact_mail" value='{$vo.contact_mail|default=""}' pattern="email" vali-name="联系邮箱" placeholder="请输入联系电子邮箱" class="layui-input">
<span class="color-desc">可选,请填写用户常用的电子邮箱</span>
<span class="help-label"><b>{:lang('联系邮箱')}</b>Contact Email</span>
<input name="contact_mail" value='{$vo.contact_mail|default=""}' pattern="email" vali-name="{:lang('联系邮箱')}" placeholder="{:lang('请输入联系电子邮箱')}" class="layui-input">
<span class="color-desc">{:lang('可选,请填写用户常用的电子邮箱')}</span>
</label>
</div>
<div class="layui-col-xs4">
<label class="relative block">
<span class="help-label"><b>联系手机</b>Contact Mobile</span>
<input type="tel" maxlength="11" name="contact_phone" value='{$vo.contact_phone|default=""}' pattern="phone" vali-name="联系手机" placeholder="请输入用户联系手机" class="layui-input">
<span class="color-desc">可选,请填写用户常用的联系手机号</span>
<span class="help-label"><b>{:lang('联系手机')}</b>Contact Mobile</span>
<input type="tel" maxlength="11" name="contact_phone" value='{$vo.contact_phone|default=""}' pattern="phone" vali-name="{:lang('联系手机')}" placeholder="{:lang('请输入用户联系手机')}" class="layui-input">
<span class="color-desc">{:lang('可选,请填写用户常用的联系手机号')}</span>
</label>
</div>
<div class="layui-col-xs4">
<label class="relative block">
<span class="help-label"><b>联系QQ</b>Contact QQ</span>
<input name="contact_qq" maxlength="11" value='{$vo.contact_qq|default=""}' pattern="qq" vali-name="联系QQ" placeholder="请输入常用的联系QQ" class="layui-input">
<span class="color-desc">可选,请填写用户常用的联系QQ号</span>
<span class="help-label"><b>{:lang('联系QQ')}</b>Contact QQ</span>
<input name="contact_qq" maxlength="11" value='{$vo.contact_qq|default=""}' pattern="qq" vali-name="{:lang('联系QQ')}" placeholder="{:lang('请输入常用的联系QQ')}" class="layui-input">
<span class="color-desc">{:lang('可选,请填写用户常用的联系QQ号')}</span>
</label>
</div>
</div>
<label class="layui-form-item block relative margin-top-10">
<span class="help-label"><b>用户描述</b>User Remark</span>
<textarea placeholder="请输入用户描述" class="layui-textarea" name="describe">{$vo.describe|default=""}</textarea>
<span class="help-label"><b>{:lang('用户描述')}</b>User Remark</span>
<textarea placeholder="{:lang('请输入用户描述')}" class="layui-textarea" name="describe">{$vo.describe|default=""}</textarea>
</label>
</fieldset>
@ -108,7 +108,7 @@
{notempty name='vo.id'}<input type='hidden' value='{$vo.id}' name='id'>{/notempty}
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="确定要取消编辑吗?" data-close>取消编辑</button>
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="{:lang('确定要取消编辑吗?')}" data-close>{:lang('取消编辑')}</button>
</div>
</form>

View File

@ -6,14 +6,14 @@
<button data-modal='{:url("add")}' data-title="{:lang('添加用户')}" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('添加用户')}</button>
<!--{/if}-->
<!--{if auth("state")}-->
<a data-confirm="确定要禁用这些用户吗?" data-table-id="UserTable" data-action="{:url('state')}" data-rule="id#{id};status#0" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('批量禁用')}</a>
<a data-confirm="{:lang('确定要禁用这些用户吗?')}" data-table-id="UserTable" data-action="{:url('state')}" data-rule="id#{id};status#0" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('批量禁用')}</a>
<!--{/if}-->
{else}
<!--{if auth("state")}-->
<a data-confirm="确定要恢复这些账号吗?" data-table-id="UserTable" data-action="{:url('state')}" data-rule="id#{id};status#1" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('批量恢复')}</a>
<a data-confirm="{:lang('确定要恢复这些账号吗?')}" data-table-id="UserTable" data-action="{:url('state')}" data-rule="id#{id};status#1" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('批量恢复')}</a>
<!--{/if}-->
<!--{if auth("remove")}-->
<a data-confirm="确定永久删除这些账号吗?" data-table-id="UserTable" data-action='{:url("remove")}' data-rule="id#{id}" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('批量删除')}</a>
<a data-confirm="{:lang('确定永久删除这些账号吗?')}" data-table-id="UserTable" data-action='{:url("remove")}' data-rule="id#{id}" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('批量删除')}</a>
<!--{/if}-->
{/if}
{/block}

View File

@ -3,29 +3,29 @@
<label class="layui-form-item relative block">
<span class="help-label"><b>登录用户账号</b>Username</span>
<span class="help-label"><b>{:lang('登录用户账号')}</b>Username</span>
<input disabled value='{$vo.username|default=""}' class="layui-input think-bg-gray">
<span class="help-block">登录用户账号创建后,不允许再次修改。</span>
<span class="help-block">{:lang('登录用户账号创建后,不允许再次修改。')}</span>
</label>
<!--{if $verify}-->
<label class="layui-form-item relative block">
<span class="help-label"><b>旧的登录密码</b>Old Password</span>
<input type="password" autofocus name="oldpassword" value='' pattern="^\S{1,}$" required vali-name="验证密码" placeholder="请输入旧的登录密码" class="layui-input">
<span class="color-desc">请输入旧密码来验证修改权限,旧密码不限制格式。</span>
<span class="help-label"><b>{:lang('旧的登录密码')}</b>Old Password</span>
<input type="password" autofocus name="oldpassword" value='' pattern="^\S{1,}$" required vali-name="{:lang('验证密码')}" placeholder="{:lang('请输入旧的登录密码')}" class="layui-input">
<span class="color-desc">{:lang('请输入旧密码来验证修改权限,旧密码不限制格式。')}</span>
</label>
<!--{/if}-->
<label class="layui-form-item relative block">
<span class="help-label"><b>新的登录密码</b>New Password</span>
<input type="password" name="password" maxlength="32" pattern="^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$).{6,32}$" required vali-name="登录密码" placeholder="请输入新的登录密码" class="layui-input">
<span class="color-desc">密码必须包含大小写字母、数字、符号的任意两者组合。</span>
<span class="help-label"><b>{:lang('新的登录密码')}</b>New Password</span>
<input type="password" name="password" maxlength="32" pattern="^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$).{6,32}$" required vali-name="{:lang('登录密码')}" placeholder="{:lang('请输入新的登录密码')}" class="layui-input">
<span class="color-desc">{:lang('密码必须包含大小写字母、数字、符号的任意两者组合。')}</span>
</label>
<label class="layui-form-item relative block">
<span class="help-label"><b>重复登录密码</b>Repeat Password</span>
<input type="password" name="repassword" maxlength="32" pattern="^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$).{6,32}$" required vali-name="重复密码" placeholder="请重复输入登录密码" class="layui-input">
<span class="color-desc">密码必须包含大小写字母、数字、符号的任意两者组合。</span>
<span class="help-label"><b>{:lang('重复登录密码')}</b>Repeat Password</span>
<input type="password" name="repassword" maxlength="32" pattern="^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$).{6,32}$" required vali-name="{:lang('重复密码')}" placeholder="{:lang('请重复输入登录密码')}" class="layui-input">
<span class="color-desc">{:lang('密码必须包含大小写字母、数字、符号的任意两者组合。')}</span>
</label>
</div>
@ -34,7 +34,7 @@
{notempty name='vo.id'}<input type='hidden' value='{$vo.id}' name='id'>{/notempty}
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="确定要取消编辑吗?" data-close>取消编辑</button>
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="{:lang('确定要取消编辑吗?')}" data-close>{:lang('取消编辑')}</button>
</div>
</form>

View File

@ -0,0 +1,23 @@
<?php
// +----------------------------------------------------------------------
// | Center Plugin for ThinkAdmin
// +----------------------------------------------------------------------
// | 版权所有 2014~2025 ThinkAdmin [ thinkadmin.top ]
// +----------------------------------------------------------------------
// | 官方网站: https://thinkadmin.top
// +----------------------------------------------------------------------
// | 开源协议 ( https://mit-license.org )
// | 免责声明 ( https://thinkadmin.top/disclaimer )
// +----------------------------------------------------------------------
$extra = [];
return array_merge($extra, [
'管理插件' => 'Manage Plugin',
'取消默认' => 'Cancel Default',
'设为默认' => 'Set as Default',
'未配置菜单' => 'Menu Not Configured',
'无记录' => 'No Records',
]);

View File

@ -24,14 +24,14 @@
</div>
<div class="margin-top-10 flex-between">
{notempty name='item.plugmenus'}
<a class="layui-btn layui-btn-sm" id="p{$item.encode}" data-href="{$item.center}">管理插件</a>
<a class="layui-btn layui-btn-sm" id="p{$item.encode}" data-href="{$item.center}">{:lang('管理插件')}</a>
{if auth('setdefault') and isset($default) and $default eq $item.code}
<a class="layui-btn layui-btn-sm layui-btn-normal" data-action="{:url('setdefault')}" data-value="default#0">取消默认</a>
<a class="layui-btn layui-btn-sm layui-btn-normal" data-action="{:url('setdefault')}" data-value="default#0">{:lang('取消默认')}</a>
{elseif auth('setdefault')}
<a class="layui-btn layui-btn-sm layui-btn-primary" data-action="{:url('setdefault')}" data-value="default#{$item.code}">设为默认</a>
<a class="layui-btn layui-btn-sm layui-btn-primary" data-action="{:url('setdefault')}" data-value="default#{$item.code}">{:lang('设为默认')}</a>
{/if}
{else}
<a class="layui-btn layui-btn-sm layui-btn-disabled">未配置菜单</a>
<a class="layui-btn layui-btn-sm layui-btn-disabled">{:lang('未配置菜单')}</a>
{/notempty}
</div>
</div>
@ -39,7 +39,7 @@
{/foreach}
{empty name='items'}
<div>
<div class="notdata">无记录</div>
<div class="notdata">{:lang('无记录')}</div>
</div>
{/empty}
</div>

View File

@ -0,0 +1,140 @@
<?php
// +----------------------------------------------------------------------
// | Payment Plugin for ThinkAdmin
// +----------------------------------------------------------------------
// | 版权所有 2014~2025 ThinkAdmin [ thinkadmin.top ]
// +----------------------------------------------------------------------
// | 官方网站: https://thinkadmin.top
// +----------------------------------------------------------------------
// | 开源协议 ( https://mit-license.org )
// | 免责声明 ( https://thinkadmin.top/disclaimer )
// +----------------------------------------------------------------------
$extra = [];
return array_merge($extra, [
// 通用
'回 收 站' => 'Recycle Bin',
'排序权重' => 'Sort Weight',
'头像' => 'Avatar',
'操作面板' => 'Actions',
'已激活' => 'Activated',
'已禁用' => 'Disabled',
'已启用' => 'Enabled',
'已取消' => 'Cancelled',
'已生效' => 'Effective',
'锁定中' => 'Locked',
'锁定' => 'Lock',
'解 锁' => 'Unlock',
'锁 定' => 'Lock',
'删 除' => 'Delete',
'编 辑' => 'Edit',
'保存数据' => 'Save Data',
'取消编辑' => 'Cancel Edit',
'确定要永久删除吗?' => 'Are you sure you want to permanently delete?',
'确定要删除选中的记录吗?' => 'Are you sure you want to delete selected records?',
'确定要删除文章吗?' => 'Are you sure you want to delete the article?',
'全部' => 'All',
'搜 索' => 'Search',
'导 出' => 'Export',
'创建时间' => 'Create Time',
'操作时间' => 'Operation Time',
'更新时间' => 'Update Time',
// 余额管理
'余额管理' => 'Balance Management',
'余额统计' => 'Balance Statistics',
'累计充值' => 'Total Recharge',
'已消费' => 'Consumed',
'剩余可用余额' => 'Available Balance',
'用户账号' => 'User Account',
'用户昵称' => 'User Nickname',
'绑定账号' => 'Bound Account',
'交易金额' => 'Transaction Amount',
'交易单号' => 'Transaction Code',
'交易状态' => 'Transaction Status',
'操作描述' => 'Operation Description',
'操作名称' => 'Operation Name',
'状态操作' => 'Status Operation',
'取消时间' => 'Cancel Time',
'生效时间' => 'Effective Time',
'锁定时间' => 'Lock Time',
'元' => 'Yuan',
// 积分管理
'积分管理' => 'Integral Management',
'积分统计' => 'Integral Statistics',
'累计发放' => 'Total Issued',
'剩余可用' => 'Available',
'积分' => 'Integral',
// 支付管理
'支付管理' => 'Payment Management',
'支付配置' => 'Payment Configuration',
'添加支付' => 'Add Payment',
'批量删除' => 'Batch Delete',
'图标' => 'Icon',
'支付编号' => 'Payment Code',
'支付类型' => 'Payment Type',
'支付名称' => 'Payment Name',
'终端授权' => 'Terminal Authorization',
'支付状态' => 'Payment Status',
// 支付记录
'订单内容' => 'Order Content',
'订单标题' => 'Order Title',
'订单编号' => 'Order Number',
'订单名称' => 'Order Name',
'订单金额' => 'Order Amount',
'需支付' => 'Need to Pay',
'已付' => 'Paid',
'待审' => 'Pending Review',
'支付描述' => 'Payment Description',
'支付状态' => 'Payment Status',
'已支付' => 'Paid',
'未支付' => 'Unpaid',
'待支付' => 'Pending Payment',
'待审核' => 'Pending Review',
'已拒绝' => 'Rejected',
'已完成' => 'Completed',
'支付类型' => 'Payment Type',
'支付时间' => 'Payment Time',
'用户编号' => 'User Code',
'支付行为数据' => 'Payment Behavior Data',
// 退款管理
'退款内容' => 'Refund Content',
'用户姓名' => 'User Name',
'请输入用户姓名' => 'Please enter user name',
'请输入订单内容' => 'Please enter order content',
'请选择创建时间' => 'Please select create time',
// 微信支付配置
'公众号APPID' => 'WeChat Official Account APPID',
'请输入18位绑定公众号必填' => 'Please enter 18-digit bound official account (required)',
'微信商户号' => 'WeChat Merchant Number',
'请输入微信商户号(必填)' => 'Please enter WeChat merchant number (required)',
'微信支付 V2 接口' => 'WeChat Payment V2 API',
'微信支付 V3 接口' => 'WeChat Payment V3 API',
'商户密钥' => 'Merchant Key',
'请输入32位微信商户密钥必填' => 'Please enter 32-digit WeChat merchant key (required)',
'支付公钥ID' => 'Payment Public Key ID',
'请输入商户证书公钥序号' => 'Please enter merchant certificate public key serial number',
'证书内容' => 'Certificate Content',
'请输入商户证书公钥内容' => 'Please enter merchant certificate public key content',
'必填,' => 'Required, ',
'从商户平台上下载支付证书,解压并取得其中的 apiclient_cert.pem 用记事本打开并复制文件内容填至此处。' => 'Download the payment certificate from the merchant platform, extract it and get apiclient_cert.pem, open it with Notepad and copy the file content to fill here.',
'密钥内容' => 'Key Content',
'请输入微信商户密钥文件内容' => 'Please enter WeChat merchant key file content',
'从商户平台上下载支付证书,解压并取得其中的 apiclient_key.pem 用记事本打开并复制文件内容填至此处。' => 'Download the payment certificate from the merchant platform, extract it and get apiclient_key.pem, open it with Notepad and copy the file content to fill here.',
'微信支付公钥' => 'WeChat Payment Public Key',
'微信支付公钥 ID' => 'WeChat Payment Public Key ID',
'请输入微信支付公钥ID' => 'Please enter WeChat payment public key ID',
'微信支付公钥内容' => 'WeChat Payment Public Key Content',
' 需要填写文件的全部内容 ' => '(Need to fill in the full content of the file)',
'请输入微信支付公钥内容' => 'Please enter WeChat payment public key content',
'可选,' => 'Optional, ',
'从商户平台上下载支付证书,解压并取得其中的 pub_key.pem 用记事本打开并复制文件内容填至此处。' => 'Download the payment certificate from the merchant platform, extract it and get pub_key.pem, open it with Notepad and copy the file content to fill here.',
]);

View File

@ -2,12 +2,12 @@
{block name="content"}
<div class="think-box-notify sub-strong-blue" type="info">
<strong>余额统计</strong><span>累计充值 <b>{$balanceTotal|number_format}</b> 元,已消费 <b>{$balanceCount|abs|number_format}</b> 元,剩余可用余额 <b>{:number_format($balanceTotal+$balanceCount)}</b> 元。</span>
<strong>{:lang('余额统计')}</strong><span>{:lang('累计充值')} <b>{$balanceTotal|number_format}</b> {:lang('')}{:lang('已消费')} <b>{$balanceCount|abs|number_format}</b> {:lang('')}{:lang('剩余可用余额')} <b>{:number_format($balanceTotal+$balanceCount)}</b> {:lang('')}</span>
</div>
<div class="layui-tab layui-tab-card">
<ul class="layui-tab-title">
{foreach ['index'=>'余额管理','recycle'=>'回 收 站'] as $k=>$v}{if isset($type) and $type eq $k}
{foreach ['index'=>lang('余额管理'),'recycle'=>lang('回 收 站')] as $k=>$v}{if isset($type) and $type eq $k}
<li data-open="{:url('index')}?type={$k}" class="layui-this">{$v}</li>
{else}
<li data-open="{:url('index')}?type={$k}">{$v}</li>
@ -27,39 +27,39 @@
cols: [[
{field: 'id', hide: true},
// {checkbox: true, fixed: true},
{field: 'headimg', title: '头像', width: 70, align: 'center', templet: '<div>{{-showTableImage(d.user.headimg,true,"sm")}}</div>'},
{field: 'headimg', title: '{:lang("头像")}', width: 70, align: 'center', templet: '<div>{{-showTableImage(d.user.headimg,true,"sm")}}</div>'},
{
field: 'id', title: '用户账号', minWidth: 170, width: '10%', templet: function (d) {
return laytpl('<div>用户昵称:{{d.user.nickname||"-"}}<br>绑定账号:{{d.user.email||d.user.phone||d.user.username||"-"}}</div>').render(d);
field: 'id', title: '{:lang("用户账号")}', minWidth: 170, width: '10%', templet: function (d) {
return laytpl('<div>{:lang("用户昵称")}{{d.user.nickname||"-"}}<br>{:lang("绑定账号")}{{d.user.email||d.user.phone||d.user.username||"-"}}</div>').render(d);
}
},
{
field: 'amount', title: '交易金额', sort: true, minWidth: 180, width: '15%', templet: function (d) {
return laytpl('<div>交易金额:<b class="color-blue">{{d.amount}}</b> 元<br>交易单号:<b class="color-blue">{{d.code||"-"}}</b></div>').render(d);
field: 'amount', title: '{:lang("交易金额")}', sort: true, minWidth: 180, width: '15%', templet: function (d) {
return laytpl('<div>{:lang("交易金额")}<b class="color-blue">{{d.amount}}</b> {:lang("")}<br>{:lang("交易单号")}<b class="color-blue">{{d.code||"-"}}</b></div>').render(d);
}
},
{
field: 'unlock', title: '交易状态', minWidth: 190, width: '17%', templet: function (d) {
field: 'unlock', title: '{:lang("交易状态")}', minWidth: 190, width: '17%', templet: function (d) {
if (d.cancel) {
d.typeInfo = '<b class="color-desc">已取消</b>';
d.typeLabel = '取消';
d.typeInfo = '<b class="color-desc">{:lang("已取消")}</b>';
d.typeLabel = '{:lang("取消")}';
d.typeDatetime = d.cancel_time || '-';
} else if (d.unlock) {
d.typeInfo = '<b class="color-green">已生效</b>';
d.typeLabel = '生效';
d.typeInfo = '<b class="color-green">{:lang("已生效")}</b>';
d.typeLabel = '{:lang("生效")}';
d.typeDatetime = d.unlock_time || '-';
} else {
d.typeInfo = '<b class="color-blue">锁定中</b>';
d.typeLabel = '锁定';
d.typeInfo = '<b class="color-blue">{:lang("锁定中")}</b>';
d.typeLabel = '{:lang("锁定")}';
d.typeDatetime = d.unlock_time || '-';
}
return laytpl('<div>当前状态:{{-d.typeInfo}}<br>{{d.typeLabel}}时间:{{d.typeDatetime}}</div>').render(d);
return laytpl('<div>当前状态:{{-d.typeInfo}}<br>{{d.typeLabel}}{:lang("时间")}{{d.typeDatetime}}</div>').render(d);
}
},
{field: 'name', title: '操作描述', minWidth: 100, templet: '<div>操作名称:{{d.name||"-"}}<br>操作描述:{{d.remark||"-"}}</div>'},
{field: 'create_time', title: '操作时间', minWidth: 235, sort: true, templet: '<div>更新时间:{{d.update_time||"-"}}<br>创建时间:{{d.create_time||"-"}}</div>'},
{field: 'cancel', title: '状态操作', align: 'center', minWidth: 80, width: '9%', templet: '#StatusSwitchTpl'},
{field: 'id', toolbar: '#toolbar', title: '操作面板', align: 'center', minWidth: 80, width: '8%', fixed: 'right'}
{field: 'name', title: '{:lang("操作描述")}', minWidth: 100, templet: '<div>{:lang("操作名称")}{{d.name||"-"}}<br>{:lang("操作描述")}{{d.remark||"-"}}</div>'},
{field: 'create_time', title: '{:lang("操作时间")}', minWidth: 235, sort: true, templet: '<div>{:lang("更新时间")}{{d.update_time||"-"}}<br>{:lang("创建时间")}{{d.create_time||"-"}}</div>'},
{field: 'cancel', title: '{:lang("状态操作")}', align: 'center', minWidth: 80, width: '9%', templet: '#StatusSwitchTpl'},
{field: 'id', toolbar: '#toolbar', title: '{:lang("操作面板")}', align: 'center', minWidth: 80, width: '8%', fixed: 'right'}
]]
});
@ -79,9 +79,9 @@
<script type="text/html" id="StatusSwitchTpl">
<div class="ta-pt-10"></div>
<!--{if auth("cancel")}-->
<input type="checkbox" value="{{d.code}}" lay-skin="switch" lay-text="已激活|已取消" lay-filter="StatusSwitch" {{d.cancel>0?'':'checked'}}>
<input type="checkbox" value="{{d.code}}" lay-skin="switch" lay-text="{:lang('已激活')}|{:lang('已取消')}" lay-filter="StatusSwitch" {{d.cancel>0?'':'checked'}}>
<!--{else}-->
{{-d.status ? '<b class="color-green">已激活</b>' : '<b class="color-red">已取消</b>'}}
{{-d.status ? '<b class="color-green">{:lang("已激活")}</b>' : '<b class="color-red">{:lang("已取消")}</b>'}}
<!--{/if}-->
</script>
@ -89,14 +89,14 @@
{if isset($type) and $type eq 'index'}
<!--{if auth("unlock")}-->
{{# if ( d.cancel==0 && d.unlock==0 ){ }}
<a class="layui-btn layui-btn-sm layui-btn-normal" data-action='{:url("unlock")}' data-value="code#{{d.code}};unlock#1"> </a>
<a class="layui-btn layui-btn-sm layui-btn-normal" data-action='{:url("unlock")}' data-value="code#{{d.code}};unlock#1">{:lang('解 锁')}</a>
{{# } else if( d.cancel==0 && d.unlock==1 ) { }}
<a class="layui-btn layui-btn-sm layui-btn-warm" data-action='{:url("unlock")}' data-value="code#{{d.code}};unlock#0"> </a>
<a class="layui-btn layui-btn-sm layui-btn-warm" data-action='{:url("unlock")}' data-value="code#{{d.code}};unlock#0">{:lang('锁 定')}</a>
{{# } }}
<!--{/if}-->
{else}
<!--{if auth("remove")}-->
<a class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="确定要永久删除吗?" data-action="{:url('remove')}" data-value="code#{{d.code}}"> </a>
<a class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="{:lang('确定要永久删除吗?')}" data-action="{:url('remove')}" data-value="code#{{d.code}}">{:lang('删 除')}</a>
<!--{/if}-->
{/if}
</script>

View File

@ -2,22 +2,22 @@
{block name="button"}
<!--{if auth("types")}-->
<button data-modal="{:url('types')}" data-width="500px" class='layui-btn layui-btn-sm layui-btn-primary'>支付配置</button>
<button data-modal="{:url('types')}" data-width="500px" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('支付配置')}</button>
<!--{/if}-->
<!--{if auth("add")}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-open='{:url("add")}'>添加支付</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-open='{:url("add")}'>{:lang('添加支付')}</button>
<!--{/if}-->
<!--{if auth("remove")}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="PaymentTable" data-action='{:url("remove")}' data-rule="id#{id}" data-confirm="确定要删除选中的记录吗?">批量删除</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="PaymentTable" data-action='{:url("remove")}' data-rule="id#{id}" data-confirm="{:lang('确定要删除选中的记录吗?')}">{:lang('批量删除')}</button>
<!--{/if}-->
{/block}
{block name="content"}
<div class="layui-tab layui-tab-card">
<ul class="layui-tab-title">
{foreach ['index'=>'支付管理','recycle'=>'回 收 站'] as $k=>$v}{if isset($type) and $type eq $k}
{foreach ['index'=>lang('支付管理'),'recycle'=>lang('回 收 站')] as $k=>$v}{if isset($type) and $type eq $k}
<li data-open="{:url('index')}?type={$k}" class="layui-this">{$v}</li>
{else}
<li data-open="{:url('index')}?type={$k}">{$v}</li>
@ -39,13 +39,13 @@
sort: {field: 'sort desc,code', type: 'desc'},
cols: [[
{checkbox: true, fixed: true},
{field: 'sort', title: '排序权重', align: 'center', width: 100, sort: true, templet: '#SortInputTpl'},
{field: 'cover', title: '图标', width: 60, align: 'center', templet: "<div>{{-showTableImage(d.cover||'')}}</div>"},
{field: 'code', title: '支付编号', align: "center", minWidth: 145, width: '10%'},
{field: 'ntype', title: '支付类型', align: "center", minWidth: 140, width: '10%'},
{field: 'name', title: '支付名称', align: 'left', minWidth: 140, width: '10%'},
{field: 'sort', title: '{:lang("排序权重")}', align: 'center', width: 100, sort: true, templet: '#SortInputTpl'},
{field: 'cover', title: '{:lang("图标")}', width: 60, align: 'center', templet: "<div>{{-showTableImage(d.cover||'')}}</div>"},
{field: 'code', title: '{:lang("支付编号")}', align: "center", minWidth: 145, width: '10%'},
{field: 'ntype', title: '{:lang("支付类型")}', align: "center", minWidth: 140, width: '10%'},
{field: 'name', title: '{:lang("支付名称")}', align: 'left', minWidth: 140, width: '10%'},
{
field: 'atype', title: '终端授权', align: 'left', minWidth: 140, templet: function (d) {
field: 'atype', title: '{:lang("终端授权")}', align: 'left', minWidth: 140, templet: function (d) {
let strs = [];
layui.each(d.atype || {}, function (k, v) {
strs.push(laytpl('<span class="layui-badge think-bg-violet">{{d.v}}</span>').render({v: v}));
@ -53,9 +53,9 @@
return strs.join('');
}
},
{field: 'status', title: '支付状态', align: 'center', minWidth: 110, width: '5%', templet: '#StatusSwitchTpl'},
{field: 'create_time', title: '创建时间', align: 'center', minWidth: 170, width: '12%', sort: true},
{toolbar: '#toolbar', title: '操作面板', align: 'center', minWidth: 80, width: '8%', fixed: 'right'},
{field: 'status', title: '{:lang("支付状态")}', align: 'center', minWidth: 110, width: '5%', templet: '#StatusSwitchTpl'},
{field: 'create_time', title: '{:lang("创建时间")}', align: 'center', minWidth: 170, width: '12%', sort: true},
{toolbar: '#toolbar', title: '{:lang("操作面板")}', align: 'center', minWidth: 80, width: '8%', fixed: 'right'},
]]
});
@ -80,20 +80,20 @@
<!-- 数据状态切换模板 -->
<script type="text/html" id="StatusSwitchTpl">
<!--{if auth("state")}-->
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="已激活|已禁用" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="{:lang('已激活')}|{:lang('已禁用')}" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<!--{else}-->
{{-d.status ? '<b class="color-green">已启用</b>' : '<b class="color-red">已禁用</b>'}}
{{-d.status ? '<b class="color-green">{:lang("已启用")}</b>' : '<b class="color-red">{:lang("已禁用")}</b>'}}
<!--{/if}-->
</script>
<!-- 数据操作工具条模板 -->
<script type="text/html" id="toolbar">
<!--{if auth("edit") and isset($type) and $type eq 'index'}-->
<a class="layui-btn layui-btn-primary layui-btn-sm" data-open='{:url("edit")}?id={{d.id}}'> </a>
<a class="layui-btn layui-btn-primary layui-btn-sm" data-open='{:url("edit")}?id={{d.id}}'>{:lang('编 辑')}</a>
<!--{/if}-->
<!--{if auth("remove") and isset($type) and $type neq 'index'}-->
<a class="layui-btn layui-btn-danger layui-btn-sm" data-action="{:url('remove')}" data-value="id#{{d.id}}" data-confirm="确定要删除文章吗?"> </a>
<a class="layui-btn layui-btn-danger layui-btn-sm" data-action="{:url('remove')}" data-value="id#{{d.id}}" data-confirm="{:lang('确定要删除文章吗?')}">{:lang('删 除')}</a>
<!--{/if}-->
</script>
{/block}

View File

@ -2,12 +2,12 @@
{block name="content"}
<div class="think-box-notify sub-strong-blue" type="info">
<strong>积分统计</strong><span>累计发放 <b>{$integralTotal|number_format}</b> 积分,已消费 <b>{$integralCount|abs|number_format}</b> 积分,剩余可用 <b>{:number_format($integralTotal+$integralCount)}</b> 积分。</span>
<strong>{:lang('积分统计')}</strong><span>{:lang('累计发放')} <b>{$integralTotal|number_format}</b> {:lang('积分')}{:lang('已消费')} <b>{$integralCount|abs|number_format}</b> {:lang('积分')}{:lang('剩余可用')} <b>{:number_format($integralTotal+$integralCount)}</b> {:lang('积分')}</span>
</div>
<div class="layui-tab layui-tab-card">
<ul class="layui-tab-title">
{foreach ['index'=>'积分管理','recycle'=>'回 收 站'] as $k=>$v}{if isset($type) and $type eq $k}
{foreach ['index'=>lang('积分管理'),'recycle'=>lang('回 收 站')] as $k=>$v}{if isset($type) and $type eq $k}
<li data-open="{:url('index')}?type={$k}" class="layui-this">{$v}</li>
{else}
<li data-open="{:url('index')}?type={$k}">{$v}</li>

View File

@ -0,0 +1,93 @@
<?php
// +----------------------------------------------------------------------
// | Wechat Service Plugin for ThinkAdmin
// +----------------------------------------------------------------------
// | 版权所有 2014~2025 ThinkAdmin [ thinkadmin.top ]
// +----------------------------------------------------------------------
// | 官方网站: https://thinkadmin.top
// +----------------------------------------------------------------------
// | 开源协议 ( https://mit-license.org )
// | 免责声明 ( https://thinkadmin.top/disclaimer )
// +----------------------------------------------------------------------
$extra = [];
return array_merge($extra, [
// 通用
'操作面板' => 'Actions',
'已激活' => 'Activated',
'已禁用' => 'Disabled',
'同 步' => 'Sync',
'清 零' => 'Clear',
'回收站' => 'Recycle Bin',
'公众号' => 'Official Account',
'确定要同步授权微信吗?' => 'Are you sure you want to sync authorized WeChat?',
'每个微信每个月有10次清零机会请谨慎使用' => 'Each WeChat account has 10 clear opportunities per month, please use with caution!',
// 微信授权
'同步授权微信' => 'Sync Authorized WeChat',
'接口信息' => 'Interface Information',
'公众号APPID' => 'Official Account APPID',
'已请求' => 'Requested',
'次' => 'times',
'平台接口密钥' => 'Platform Interface Key',
'未生成平台接口密钥, 请稍候授权绑定' => 'Platform interface key not generated, please wait for authorization binding',
'消息推送地址' => 'Message Push Address',
'未配置消息推送地址' => 'Message push address not configured',
'公众号信息' => 'Official Account Information',
'未获取到微信昵称' => 'WeChat nickname not obtained',
'完成授权' => 'Authorization Completed',
'未认证' => 'Not Verified',
'已认证' => 'Verified',
// 搜索
'公众号ID' => 'Official Account ID',
'请输入APPID' => 'Please enter APPID',
'微信名称' => 'WeChat Name',
'请输入微信名称' => 'Please enter WeChat name',
'公司名称' => 'Company Name',
'请输入公司名称' => 'Please enter company name',
'认证类型' => 'Verification Type',
'- 全部 -' => '- All -',
'订阅号' => 'Subscription Account',
'服务号' => 'Service Account',
'小程序' => 'Mini Program',
'认证状态' => 'Verification Status',
'授权时间' => 'Authorization Time',
'请选择授权时间' => 'Please select authorization time',
'于' => 'At',
// 配置
'开放平台配置' => 'Open Platform Configuration',
'微信开放平台对接参数及客户端接口网关地址,面向客户端系统支持 Yar、JsonRpc、WebService 接口方式调用。' => 'WeChat Open Platform docking parameters and client interface gateway address, supporting Yar, JsonRpc, WebService interface methods for client systems.',
'开放平台账号' => 'Open Platform Account',
'未配置' => 'Not Configured',
'开放平台服务 AppId需要在微信开放平台获取' => 'Open Platform Service AppId, needs to be obtained from WeChat Open Platform',
'开放平台密钥' => 'Open Platform Secret',
'开放平台服务 AppSecret需要在微信开放平台获取' => 'Open Platform Service AppSecret, needs to be obtained from WeChat Open Platform',
'开放平台消息校验' => 'Open Platform Message Verification',
'开发者在代替微信接收到消息时,用此 TOKEN 来校验消息' => 'When developers receive messages on behalf of WeChat, use this TOKEN to verify messages',
'开放平台消息加解密' => 'Open Platform Message Encryption/Decryption',
'在代替微信收发消息时使用必须是长度为43位字母和数字组合的字符串' => 'Used when sending and receiving messages on behalf of WeChat, must be a 43-character string of letters and numbers',
'授权白名单IP地址' => 'Authorization Whitelist IP Address',
'需要在开放平台配置此IP地址后才能调用开放平台的接口哦' => 'This IP address needs to be configured in the Open Platform before calling the Open Platform interface',
'授权发起页域名' => 'Authorization Initiation Page Domain',
'微信开放平台对接所需参数,从本域名跳转到登录授权页才可以完成登录授权,无需填写域名协议前缀' => 'Required parameter for WeChat Open Platform docking. Jump from this domain to the login authorization page to complete login authorization. No need to fill in domain protocol prefix',
'授权事件接收地址' => 'Authorization Event Receiving Address',
'微信开放平台对接所需参数,用于接收取消授权通知、授权成功通知、授权更新通知、接收 TICKET 凭据' => 'Required parameter for WeChat Open Platform docking, used to receive authorization cancellation notifications, authorization success notifications, authorization update notifications, and receive TICKET credentials',
'微信消息接收地址' => 'WeChat Message Receiving Address',
'微信开放平台对接所需参数,通过该 URL 接收微信消息和事件推送,$APPID$ 将被替换为微信 AppId' => 'Required parameter for WeChat Open Platform docking. Receive WeChat messages and event pushes through this URL. $APPID$ will be replaced with WeChat AppId',
'微信授权绑定跳转入口' => 'WeChat Authorization Binding Redirect Entry',
'应用插件 ThinkPlugsWechat 对接所需参数,使用微信第三方授权时会跳转到这个页面,由微信管理员进行扫码授权' => 'Required parameter for ThinkPlugsWechat plugin docking. When using WeChat third-party authorization, it will jump to this page for WeChat administrator to scan code for authorization',
'客户端系统 Yar 调用接口' => 'Client System Yar Call Interface',
'应用插件 ThinkPlugsWechat 对接所需参数,客户端 Yar 接口TOKEN 包含 class appid time nostr sign 的加密内容' => 'Required parameter for ThinkPlugsWechat plugin docking. Client Yar interface. TOKEN contains encrypted content of class appid time nostr sign',
'客户端系统 Soap 调用接口' => 'Client System Soap Call Interface',
'应用插件 ThinkPlugsWechat 对接所需参数,客户端 Soap 接口TOKEN 包含 class appid time nostr sign 的加密内容' => 'Required parameter for ThinkPlugsWechat plugin docking. Client Soap interface. TOKEN contains encrypted content of class appid time nostr sign',
'客户端系统 JsonRpc 调用接口' => 'Client System JsonRpc Call Interface',
'应用插件 ThinkPlugsWechat 对接所需参数,客户端 JsonRpc 接口链接TOKEN 包含 class appid time nostr sign 的加密内容' => 'Required parameter for ThinkPlugsWechat plugin docking. Client JsonRpc interface link. TOKEN contains encrypted content of class appid time nostr sign',
// 未授权页面
'还没有授权,请授权公众号' => 'Not yet authorized, please authorize the official account',
]);

View File

@ -6,103 +6,103 @@
<!--{/if}-->
<!--{if auth("edit")}-->
<button data-modal="{:url('edit')}" class='layui-btn layui-btn-sm layui-btn-primary'>开放平台配置</button>
<button data-modal="{:url('edit')}" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('开放平台配置')}</button>
<!--{/if}-->
{/block}
{block name="content"}
<div class="think-box-notify sub-strong-blue">
微信开放平台对接参数及客户端接口网关地址,面向客户端系统支持 <b>Yar</b><b>JsonRpc</b><b>WebService</b> 接口方式调用。
{:lang('微信开放平台对接参数及客户端接口网关地址,面向客户端系统支持 Yar、JsonRpc、WebService 接口方式调用。')}
</div>
<div class="think-box-shadow">
<div class="padding-20 padding-top-10 padding-bottom-10">
<div class="layui-row layui-col-space30">
<div class="layui-col-md6">
<div class="layui-form-item">
<span class="help-label"><b>开放平台账号</b>AppId</span>
<span class="help-label"><b>{:lang('开放平台账号')}</b>AppId</span>
<label class="relative block">
<input disabled class="layui-input layui-bg-gray" value="{:sysconf('service.component_appid')?:'未配置'}">
<input disabled class="layui-input layui-bg-gray" value="{:sysconf('service.component_appid')?:lang('未配置')}">
<a data-copy="{:sysconf('service.component_appid')}" data-tips-text="复制" class="layui-icon layui-icon-release input-right-icon"></a>
</label>
<p class="help-block">开放平台服务 AppId需要在微信开放平台获取</p>
<p class="help-block">{:lang('开放平台服务 AppId需要在微信开放平台获取')}</p>
</div>
<div class="layui-form-item">
<span class="help-label"><b>开放平台密钥</b>AppSecret</span>
<span class="help-label"><b>{:lang('开放平台密钥')}</b>AppSecret</span>
<label class="relative block">
<input disabled class="layui-input layui-bg-gray" value="{:sysconf('service.component_appsecret')?:'未配置'}">
<input disabled class="layui-input layui-bg-gray" value="{:sysconf('service.component_appsecret')?:lang('未配置')}">
<a data-copy="{:sysconf('service.component_appsecret')}" data-tips-text="复制" class="layui-icon layui-icon-release input-right-icon"></a>
</label>
<p class="help-block">开放平台服务 AppSecret需要在微信开放平台获取</p>
<p class="help-block">{:lang('开放平台服务 AppSecret需要在微信开放平台获取')}</p>
</div>
<div class="layui-form-item">
<span class="help-label"><b>开放平台消息校验</b>Token</span>
<span class="help-label"><b>{:lang('开放平台消息校验')}</b>Token</span>
<label class="relative block">
<input disabled class="layui-input layui-bg-gray" value="{:sysconf('service.component_token')?:'未配置'}">
<input disabled class="layui-input layui-bg-gray" value="{:sysconf('service.component_token')?:lang('未配置')}">
<a data-copy="{:sysconf('service.component_token')}" data-tips-text="复制" class="layui-icon layui-icon-release input-right-icon"></a>
</label>
<p class="help-block">开发者在代替微信接收到消息时,用此 TOKEN 来校验消息</p>
<p class="help-block">{:lang('开发者在代替微信接收到消息时,用此 TOKEN 来校验消息')}</p>
</div>
<div class="layui-form-item">
<span class="help-label"><b>开放平台消息加解密</b>AesKey</span>
<span class="help-label"><b>{:lang('开放平台消息加解密')}</b>AesKey</span>
<label class="relative block">
<input disabled class="layui-input layui-bg-gray" value="{:sysconf('service.component_encodingaeskey')?:'未配置'}">
<input disabled class="layui-input layui-bg-gray" value="{:sysconf('service.component_encodingaeskey')?:lang('未配置')}">
<a data-copy="{:sysconf('service.component_encodingaeskey')}" data-tips-text="复制" class="layui-icon layui-icon-release input-right-icon"></a>
</label>
<p class="help-block">在代替微信收发消息时使用必须是长度为43位字母和数字组合的字符串</p>
<p class="help-block">{:lang('在代替微信收发消息时使用必须是长度为43位字母和数字组合的字符串')}</p>
</div>
<div class="layui-form-item">
<span class="help-label"><b>授权白名单IP地址</b>ClientIp</span>
<span class="help-label"><b>{:lang('授权白名单IP地址')}</b>ClientIp</span>
<label class="relative block">
<input disabled class="layui-input layui-bg-gray" value="{$geoip|default=''}">
<a data-copy="{$geoip|default=''}" data-tips-text="复制" class="layui-icon layui-icon-release input-right-icon"></a>
</label>
<p class="help-block">需要在开放平台配置此IP地址后才能调用开放平台的接口哦</p>
<p class="help-block">{:lang('需要在开放平台配置此IP地址后才能调用开放平台的接口哦')}</p>
</div>
</div>
<div class="layui-col-md6">
<div class="layui-form-item">
<span class="help-label"><b>授权发起页域名</b>微信开放平台</span>
<span class="help-label"><b>{:lang('授权发起页域名')}</b>微信开放平台</span>
<label class="relative block">
<input disabled class="layui-input layui-bg-gray" value="{$request->host()}">
<a data-copy="{$request->host()}" data-tips-text="复制" class="layui-icon layui-icon-release input-right-icon"></a>
</label>
<p class="help-block">微信开放平台对接所需参数,从本域名跳转到登录授权页才可以完成登录授权,无需填写域名协议前缀</p>
<p class="help-block">{:lang('微信开放平台对接所需参数,从本域名跳转到登录授权页才可以完成登录授权,无需填写域名协议前缀')}</p>
</div>
<div class="layui-form-item">
<span class="help-label"><b>授权事件接收地址</b>微信开放平台</span>
<span class="help-label"><b>{:lang('授权事件接收地址')}</b>微信开放平台</span>
<label class="relative block">
<input disabled class="layui-input layui-bg-gray" value="{:url('api.push/ticket',[],false,true)}">
<a data-copy="{:url('api.push/ticket',[],false,true)}" data-tips-text="复制" class="layui-icon layui-icon-release input-right-icon"></a>
</label>
<p class="help-block">微信开放平台对接所需参数,用于接收取消授权通知、授权成功通知、授权更新通知、接收 TICKET 凭据</p>
<p class="help-block">{:lang('微信开放平台对接所需参数,用于接收取消授权通知、授权成功通知、授权更新通知、接收 TICKET 凭据')}</p>
</div>
<div class="layui-form-item">
<span class="help-label"><b>微信消息接收地址</b>微信开放平台</span>
<span class="help-label"><b>{:lang('微信消息接收地址')}</b>微信开放平台</span>
<label class="relative block">
<input disabled class="layui-input layui-bg-gray" value="{:url('api.push/notify',[],false,true)}/appid/$APPID$">
<a data-copy="{:url('api.push/notify',[],false,true)}/appid/$APPID$" data-tips-text="复制" class="layui-icon layui-icon-release input-right-icon"></a>
</label>
<p class="help-block">微信开放平台对接所需参数,通过该 URL 接收微信消息和事件推送,$APPID$ 将被替换为微信 AppId</p>
<p class="help-block">{:lang('微信开放平台对接所需参数,通过该 URL 接收微信消息和事件推送,$APPID$ 将被替换为微信 AppId')}</p>
</div>
<div class="layui-form-item">
<span class="help-label"><b>微信授权绑定跳转入口</b>ThinkPlugsWechat</span>
<span class="help-label"><b>{:lang('微信授权绑定跳转入口')}</b>ThinkPlugsWechat</span>
<label class="relative block"><input disabled class="layui-input layui-bg-gray" value="{:url('api.push/auth',[],false,true)}?source=SOURCE"></label>
<p class="help-block">应用插件 ThinkPlugsWechat 对接所需参数,使用微信第三方授权时会跳转到这个页面,由微信管理员进行扫码授权</p>
<p class="help-block">{:lang('应用插件 ThinkPlugsWechat 对接所需参数,使用微信第三方授权时会跳转到这个页面,由微信管理员进行扫码授权')}</p>
</div>
<div class="layui-form-item layui-hide">
<span class="help-label"><b>客户端系统 Yar 调用接口</b>ThinkPlugsWechat</span>
<span class="help-label"><b>{:lang('客户端系统 Yar 调用接口')}</b>ThinkPlugsWechat</span>
<label class="relative block"><input disabled class="layui-input layui-bg-gray" value="{:url('api.client/yar',[],false,true)}?token=TOKEN"></label>
<p class="help-block">应用插件 ThinkPlugsWechat 对接所需参数,客户端 Yar 接口TOKEN 包含 class appid time nostr sign 的加密内容</p>
<p class="help-block">{:lang('应用插件 ThinkPlugsWechat 对接所需参数,客户端 Yar 接口TOKEN 包含 class appid time nostr sign 的加密内容')}</p>
</div>
<div class="layui-form-item layui-hide">
<span class="help-label"><b>客户端系统 Soap 调用接口</b>ThinkPlugsWechat</span>
<span class="help-label"><b>{:lang('客户端系统 Soap 调用接口')}</b>ThinkPlugsWechat</span>
<label class="relative block"><input disabled class="layui-input layui-bg-gray" value="{:url('api.client/soap',[],false,true)}?token=TOKEN"></label>
<p class="help-block">应用插件 ThinkPlugsWechat 对接所需参数,客户端 Soap 接口TOKEN 包含 class appid time nostr sign 的加密内容</p>
<p class="help-block">{:lang('应用插件 ThinkPlugsWechat 对接所需参数,客户端 Soap 接口TOKEN 包含 class appid time nostr sign 的加密内容')}</p>
</div>
<div class="layui-form-item">
<span class="help-label"><b>客户端系统 JsonRpc 调用接口</b>ThinkPlugsWechat</span>
<span class="help-label"><b>{:lang('客户端系统 JsonRpc 调用接口')}</b>ThinkPlugsWechat</span>
<label class="relative block"><input disabled class="layui-input layui-bg-gray" value="{:url('api.client/jsonrpc',[],false,true)}?token=TOKEN"></label>
<p class="help-block">应用插件 ThinkPlugsWechat 对接所需参数,客户端 JsonRpc 接口链接TOKEN 包含 class appid time nostr sign 的加密内容</p>
<p class="help-block">{:lang('应用插件 ThinkPlugsWechat 对接所需参数,客户端 JsonRpc 接口链接TOKEN 包含 class appid time nostr sign 的加密内容')}</p>
</div>
</div>
</div>

View File

@ -1 +1 @@
还没有授权,请授权公众号
{:lang('还没有授权,请授权公众号')}

View File

@ -2,14 +2,14 @@
{block name="button"}
<!--{if isset($type) and $type eq 'index' and auth("queue")}-->
<button data-confirm="确定要同步授权微信吗?" data-queue="{:url('queue')}" class='layui-btn layui-btn-sm layui-btn-primary'>同步授权微信</button>
<button data-confirm="{:lang('确定要同步授权微信吗?')}" data-queue="{:url('queue')}" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('同步授权微信')}</button>
<!--{/if}-->
{/block}
{block name="content"}
<div class="layui-tab layui-tab-card think-bg-white">
<ul class="layui-tab-title">
{foreach ['index'=>'公众号','recycle'=>'回收站'] as $k=>$v}
{foreach ['index'=>lang('公众号'),'recycle'=>lang('回收站')] as $k=>$v}
{if isset($type) and $type eq $k}
<li class="layui-this" data-open="{:url('index')}?type={$k}">{$v}</li>
{else}
@ -31,28 +31,28 @@
sort: {field: 'auth_time', type: 'desc'},
cols: [[
{
field: 'total', sort: true, minWidth: 350, title: '接口信息', templet: function (d) {
field: 'total', sort: true, minWidth: 350, title: '{:lang("接口信息")}', templet: function (d) {
let line = [];
line.push('公众号APPID<b>{{d.authorizer_appid}}</b>,已请求 <b class="color-blue">{{d.total}}</b> 次')
line.push('平台接口密钥:<b>{{-d.appkey||"<span class=\'color-desc font-w4\'>未生成平台接口密钥, 请稍候授权绑定</span>"}}</b>')
line.push('消息推送地址:{{d.appuri||"未配置消息推送地址"}}')
line.push('{:lang("公众号APPID")}<b>{{d.authorizer_appid}}</b>{:lang("已请求")} <b class="color-blue">{{d.total}}</b> {:lang("")}')
line.push('{:lang("平台接口密钥")}<b>{{-d.appkey||"<span class=\'color-desc font-w4\'>' + '{:lang("未生成平台接口密钥, 请稍候授权绑定")}' + '</span>"}}</b>')
line.push('{:lang("消息推送地址")}{{d.appuri||"' + '{:lang("未配置消息推送地址")}' + '"}}')
return laytpl('<div class="flex flex-align-center"><div class="ta-pr-10">{{-showTableImage(d.user_headimg, false, "md")}}</div><div>' + line.join('<br>') + '</div></div>').render(d)
}
},
{
field: 'auth_time', sort: true, minWidth: 350, title: '公众号信息', templet: function (d) {
field: 'auth_time', sort: true, minWidth: 350, title: '{:lang("公众号信息")}', templet: function (d) {
let line = [];
line.push('{{-d.user_nickname||"<span class=color-desc>未获取到微信昵称</span>"}} <span class="color-desc">( {{d.user_company}} )</span>')
line.push('于 <span class="color-blue">{{layui.util.toDateString(d.auth_time*1000, "yyyy年MM月dd日 HH:mm:ss")}}</span> 完成授权')
line.push('{{-d.user_nickname||"<span class=color-desc>' + '{:lang("未获取到微信昵称")}' + '</span>"}} <span class="color-desc">( {{d.user_company}} )</span>')
line.push('{:lang("")} <span class="color-blue">{{layui.util.toDateString(d.auth_time*1000, "yyyy年MM月dd日 HH:mm:ss")}}</span> {:lang("完成授权")}')
if (d.service_verify === '未认证') {
line.push("<b>{{d.user_name||'-'}}</b> / <b>{{d.service_type||'-'}}</b> / <b class='color-red'>未认证</b>")
line.push("<b>{{d.user_name||'-'}}</b> / <b>{{d.service_type||'-'}}</b> / <b class='color-red'>{:lang('未认证')}</b>")
} else {
line.push("<b>{{d.user_name||'-'}}</b> / <b>{{d.service_type||'-'}}</b> / <b class='color-green'>已认证</b>")
line.push("<b>{{d.user_name||'-'}}</b> / <b>{{d.service_type||'-'}}</b> / <b class='color-green'>{:lang('已认证')}</b>")
}
return laytpl('<div class="flex flex-align-center"><div><img alt="" class="headimg headimg-md headimg-no" referrerpolicy="no-referrer" data-tips-hover data-tips-image src="{{d.qrcode_url}}"></div><div>' + line.join('<br>') + '</div></div>').render(d)
}
},
{toolbar: '#toolbar', title: '操作面板', minWidth: 280, fixed: 'right'},
{toolbar: '#toolbar', title: '{:lang("操作面板")}', minWidth: 280, fixed: 'right'},
]]
});
@ -74,17 +74,17 @@
<div class="ta-pt-10"></div>
<!--{if auth("state")}-->
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="已激活|已禁用" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="{:lang('已激活')}|{:lang('已禁用')}" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<!--{/if}-->
<span class="ta-ml-5"></span>
<!--{if auth("sync")}-->
<a class="layui-btn layui-btn-sm" data-action="{:url('sync')}" data-value="appid#{{d.authorizer_appid}}"> </a>
<a class="layui-btn layui-btn-sm" data-action="{:url('sync')}" data-value="appid#{{d.authorizer_appid}}">{:lang('同 步')}</a>
<!--{/if}-->
<!--{if auth("clear")}-->
<a class="layui-btn layui-btn-sm layui-btn-normal" data-confirm="每个微信每个月有10次清零机会请谨慎使用" data-action='{:url("clear")}' data-value="appid#{{d.authorizer_appid}}"> </a>
<a class="layui-btn layui-btn-sm layui-btn-normal" data-confirm="{:lang('每个微信每个月有10次清零机会请谨慎使用')}" data-action='{:url("clear")}' data-value="appid#{{d.authorizer_appid}}">{:lang('清 零')}</a>
<!--{/if}-->
</script>

View File

@ -1,28 +1,28 @@
<form class="layui-form layui-form-pane form-search" action="{$request->url()}" onsubmit="return false" method="get" autocomplete="off">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">公众号ID</label>
<label class="layui-form-label">{:lang('公众号ID')}</label>
<div class="layui-input-inline">
<input name="authorizer_appid" value="{$get.authorizer_appid|default=''}" placeholder="请输入APPID" class="layui-input">
<input name="authorizer_appid" value="{$get.authorizer_appid|default=''}" placeholder="{:lang('请输入APPID')}" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">微信名称</label>
<label class="layui-form-label">{:lang('微信名称')}</label>
<div class="layui-input-inline">
<input name="user_nickname" value="{$get.user_nickname|default=''}" placeholder="请输入微信名称" class="layui-input">
<input name="user_nickname" value="{$get.user_nickname|default=''}" placeholder="{:lang('请输入微信名称')}" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">公司名称</label>
<label class="layui-form-label">{:lang('公司名称')}</label>
<div class="layui-input-inline">
<input name="user_company" value="{$get.user_company|default=''}" placeholder="请输入公司名称" class="layui-input">
<input name="user_company" value="{$get.user_company|default=''}" placeholder="{:lang('请输入公司名称')}" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">认证类型</label>
<label class="layui-form-label">{:lang('认证类型')}</label>
<div class="layui-input-inline">
<select name="service_type" class="layui-select">
<option value="">- 全部 -</option>
{foreach ['订阅号','服务号','小程序'] as $v}
<option value="">{:lang('- 全部 -')}</option>
{foreach [lang('订阅号'),lang('服务号'),lang('小程序')] as $v}
{if isset($get.service_type) and $get.service_type eq $v.''}
<option selected value="{$v}">{$v}</option>
{else}
@ -32,11 +32,11 @@
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">认证状态</label>
<label class="layui-form-label">{:lang('认证状态')}</label>
<div class="layui-input-inline">
<select name="service_verify" class="layui-select">
<option value="">- 全部 -</option>
{foreach ['已认证','未认证'] as $v}{if isset($get.service_verify) and $get.service_verify eq $v.''}
<option value="">{:lang('- 全部 -')}</option>
{foreach [lang('已认证'),lang('未认证')] as $v}{if isset($get.service_verify) and $get.service_verify eq $v.''}
<option selected value="{$v}">{$v}</option>
{else}
<option value="{$v}">{$v}</option>
@ -45,12 +45,12 @@
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">授权时间</label>
<label class="layui-form-label">{:lang('授权时间')}</label>
<div class="layui-input-inline">
<input data-date-range name="create_at" value="{$get.create_at|default=''}" placeholder="请选择授权时间" class="layui-input">
<input data-date-range name="create_at" value="{$get.create_at|default=''}" placeholder="{:lang('请选择授权时间')}" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
</div>
</form>

View File

@ -23,5 +23,83 @@ $extra['使用微信公众平台直接模式时,需要在微信公众号平台
return array_merge($extra, [
'微信公众平台直接模式' => 'WeChat public platform direct mode',
'微信开放平台授权模式' => 'WeChat Open platform authorization mode'
'微信开放平台授权模式' => 'WeChat Open platform authorization mode',
// 粉丝管理
'拉入黑名单' => 'Add to Blacklist',
'移出黑名单' => 'Remove from Blacklist',
'清空用户数据' => 'Clear User Data',
'同步用户数据' => 'Sync User Data',
'确定要清空所有用户数据吗?' => 'Are you sure you want to clear all user data?',
'确定要创建同步用户数据的后台任务?' => 'Are you sure you want to create a background task to sync user data?',
'微信昵称' => 'WeChat Nickname',
'所在区域' => 'Location',
'性别' => 'Gender',
'使用语言' => 'Language',
'订阅状态' => 'Subscription Status',
'订阅时间' => 'Subscription Time',
'是否黑名单' => 'Blacklist Status',
'已订阅' => 'Subscribed',
'未订阅' => 'Unsubscribed',
'男' => 'Male',
'女' => 'Female',
'未知' => 'Unknown',
'操作面板' => 'Actions',
'头像' => 'Avatar',
'请输入微信昵称' => 'Please enter WeChat nickname',
'显示未订阅的粉丝' => 'Show Unsubscribed Fans',
'显示已订阅的粉丝' => 'Show Subscribed Fans',
'拉黑状态' => 'Blacklist Status',
'显示未拉黑的粉丝' => 'Show Non-Blacklisted Fans',
'显示已拉黑的粉丝' => 'Show Blacklisted Fans',
'请选择订阅时间' => 'Please select subscription time',
'微信粉丝数据' => 'WeChat Fans Data',
'所在国家' => 'Country',
'所在省份' => 'Province',
'所在城市' => 'City',
'是否拉黑' => 'Is Blacklisted',
'已拉黑' => 'Blacklisted',
'未拉黑' => 'Not Blacklisted',
// 配置
'绑定小程序' => 'Bind Mini Program',
'开放平台接口配置' => 'Open Platform Interface Configuration',
'开放平台接口' => 'Open Platform Interface',
'微信授权测试( 扫码 ' => 'WeChat Authorization Test (Scan Code)',
'微信授权测试' => 'WeChat Authorization Test',
'微信支付测试' => 'WeChat Payment Test',
'温馨提示:' => 'Tips: ',
'微信商户参数配置,此处交易的商户号需要与微信公众号对接的公众号 APPID 匹配。' => 'WeChat merchant parameter configuration. The merchant number used here needs to match the official account APPID connected to the WeChat official account.',
'微信商户账号' => 'WeChat Merchant Account',
'请输入微信商户账号(必填)' => 'Please enter WeChat merchant account (required)',
'微信商户账号,需要在微信商户平台获取' => 'WeChat merchant account needs to be obtained from WeChat merchant platform',
'微信 V2 接口密钥' => 'WeChat V2 Interface Key',
'微信商户V2密钥' => 'WeChat Merchant V2 Key',
'请输入微信商户V2密钥必填' => 'Please enter WeChat merchant V2 key (required)',
'微信商户 V2 密钥,需要在微信商户平台获取商户接口密钥' => 'WeChat merchant V2 key needs to be obtained from WeChat merchant platform',
'微信 V3 接口密钥' => 'WeChat V3 Interface Key',
'微信商户V3密钥' => 'WeChat Merchant V3 Key',
'请输入微信商户V3密钥必填' => 'Please enter WeChat merchant V3 key (required)',
'微信商户 V3 密钥,需要在微信商户平台获取商户接口密钥' => 'WeChat merchant V3 key needs to be obtained from WeChat merchant platform',
'微信 V3 支付公钥ID' => 'WeChat V3 Payment Public Key ID',
'微信商户V3支付公钥ID' => 'WeChat Merchant V3 Payment Public Key ID',
'请输入微信商户V3支付公钥ID必填' => 'Please enter WeChat merchant V3 payment public key ID (required)',
'微信商户 V3 支付证书ID需要在微信商户平台操作设置操作密码并获取商户接口密钥' => 'WeChat merchant V3 payment certificate ID needs to be set in WeChat merchant platform and merchant interface key needs to be obtained',
'微信 V3 支付公钥文件' => 'WeChat V3 Payment Public Key File',
'上传微信支付公钥' => 'Upload WeChat Payment Public Key',
'微信商户证书文件' => 'WeChat Merchant Certificate File',
'请选择需要上传证书类型,上传 P12 证书会自动转换为 PEM 证书。' => 'Please select the certificate type to upload. Uploading P12 certificate will automatically convert to PEM certificate.',
'保存配置' => 'Save Configuration',
'微信商户支付测试配置' => 'WeChat Merchant Payment Test Configuration',
'JSAPI 支付测试需要在微信商户平台配置支付目录:' => 'JSAPI payment test requires configuring payment directory in WeChat merchant platform: ',
'扫码支付①需要在微信商户平台配置支付通知地址:' => 'Scan code payment ① requires configuring payment notification address in WeChat merchant platform: ',
// 菜单管理
'公众号' => 'Official Account',
'菜单编辑' => 'Menu Editor',
'请在左侧创建菜单...' => 'Please create menu on the left...',
'菜单名称' => 'Menu Name',
'请输入菜单名称' => 'Please enter menu name',
'字数不超过13个汉字或40个字母' => 'No more than 13 Chinese characters or 40 letters',
'菜单类型' => 'Menu Type',
]);

View File

@ -2,13 +2,13 @@
{block name="button"}
<!--{if auth('options_wxapp')}-->
<button data-modal="{:url('options_wxapp')}" data-width="600px" data-title="绑定小程序" class='layui-btn layui-btn-sm layui-btn-primary'>绑定小程序</button>
<button data-modal="{:url('options_wxapp')}" data-width="600px" data-title="{:lang('绑定小程序')}" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('绑定小程序')}</button>
<!--{/if}-->
<!--{if auth('options_jsonrpc')}-->
<button data-modal="{:url('options_jsonrpc')}" data-width="600px" data-title="开放平台接口配置" class='layui-btn layui-btn-sm layui-btn-primary'>开放平台接口</button>
<button data-modal="{:url('options_jsonrpc')}" data-width="600px" data-title="{:lang('开放平台接口配置')}" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('开放平台接口')}</button>
<!--{/if}-->
<!--{if auth("options_test")}-->
<button data-modal="{:url('options_test')}" data-width="600px" data-title="微信授权测试( 扫码 " class='layui-btn layui-btn-sm layui-btn-primary'>微信授权测试</button>
<button data-modal="{:url('options_test')}" data-width="600px" data-title="{:lang('微信授权测试( 扫码 ')}" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('微信授权测试')}</button>
<!--{/if}-->
{/block}

View File

@ -2,13 +2,13 @@
{block name="button"}
<!--{if auth("payment_test")}-->
<button data-modal="{:url('payment_test')}" class='layui-btn layui-btn-sm layui-btn-primary'>微信支付测试</button>
<button data-modal="{:url('payment_test')}" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('微信支付测试')}</button>
<!--{/if}-->
{/block}
{block name="content"}
<div class="think-box-notify margin-bottom-15">
<b>温馨提示:</b>微信商户参数配置,此处交易的商户号需要与微信公众号对接的公众号 APPID 匹配。
<b>{:lang('温馨提示:')}</b>{:lang('微信商户参数配置,此处交易的商户号需要与微信公众号对接的公众号 APPID 匹配。')}
</div>
<form action="{:url('payment_save')}" method="post" data-auto="true" class='layui-form layui-card' lay-filter="payment">
@ -16,38 +16,38 @@
<div class="layui-card-body padding-left-40" style="max-width:850px">
<label class="layui-form-item relative block">
<span class="help-label"><b>微信商户账号</b>MCH_ID</span>
<input name="wechat.mch_id" required vali-name="微信商户号" placeholder="请输入微信商户账号(必填)" value="{$data.mch_id|default=''}" class="layui-input">
<span class="help-block">微信商户账号,需要在微信商户平台获取</span>
<span class="help-label"><b>{:lang('微信商户账号')}</b>MCH_ID</span>
<input name="wechat.mch_id" required vali-name="{:lang('微信商户号')}" placeholder="{:lang('请输入微信商户账号(必填)')}" value="{$data.mch_id|default=''}" class="layui-input">
<span class="help-block">{:lang('微信商户账号,需要在微信商户平台获取')}</span>
</label>
<label class="layui-form-item relative layui-hide">
<span class="help-label"><b>微信 V2 接口密钥</b>MCH_KEY</span>
<input name="wechat.mch_key" vali-name="微信商户V2密钥" type="password" lay-affix="eye" placeholder="请输入微信商户V2密钥必填" maxlength="32" pattern=".{32}" required value="{$data.mch_key|default=''}" class="layui-input">
<span class="help-block">微信商户 V2 密钥,需要在微信商户平台获取商户接口密钥</span>
<span class="help-label"><b>{:lang('微信 V2 接口密钥')}</b>MCH_KEY</span>
<input name="wechat.mch_key" vali-name="{:lang('微信商户V2密钥')}" type="password" lay-affix="eye" placeholder="{:lang('请输入微信商户V2密钥必填')}" maxlength="32" pattern=".{32}" required value="{$data.mch_key|default=''}" class="layui-input">
<span class="help-block">{:lang('微信商户 V2 密钥,需要在微信商户平台获取商户接口密钥')}</span>
</label>
<label class="layui-form-item relative block">
<span class="help-label"><b>微信 V3 接口密钥</b>MCH_V3_KEY</span>
<input name="wechat.mch_v3_key" vali-name="微信商户V3密钥" type="password" lay-affix="eye" placeholder="请输入微信商户V3密钥必填" maxlength="32" pattern=".{32}" required value="{$data.mch_v3_key|default=''}" class="layui-input">
<span class="help-block">微信商户 V3 密钥,需要在微信商户平台获取商户接口密钥</span>
<span class="help-label"><b>{:lang('微信 V3 接口密钥')}</b>MCH_V3_KEY</span>
<input name="wechat.mch_v3_key" vali-name="{:lang('微信商户V3密钥')}" type="password" lay-affix="eye" placeholder="{:lang('请输入微信商户V3密钥必填')}" maxlength="32" pattern=".{32}" required value="{$data.mch_v3_key|default=''}" class="layui-input">
<span class="help-block">{:lang('微信商户 V3 密钥,需要在微信商户平台获取商户接口密钥')}</span>
</label>
<div class="hr-line-dashed"></div>
<label class="layui-form-item relative block">
<span class="help-label"><b>微信 V3 支付公钥ID</b>MCH_V3_PAYID</span>
<input name="wechat.mch_pay_sid" vali-name="微信商户V3支付公钥ID" placeholder="请输入微信商户V3支付公钥ID必填" maxlength="45" pattern="PUB_KEY_ID_.{34}" value="{$data.mch_pay_sid|default=''}" class="layui-input">
<span class="help-block">微信商户 V3 支付证书ID需要在微信商户平台操作设置操作密码并获取商户接口密钥</span>
<span class="help-label"><b>{:lang('微信 V3 支付公钥ID')}</b>MCH_V3_PAYID</span>
<input name="wechat.mch_pay_sid" vali-name="{:lang('微信商户V3支付公钥ID')}" placeholder="{:lang('请输入微信商户V3支付公钥ID必填')}" maxlength="45" pattern="PUB_KEY_ID_.{34}" value="{$data.mch_pay_sid|default=''}" class="layui-input">
<span class="help-block">{:lang('微信商户 V3 支付证书ID需要在微信商户平台操作设置操作密码并获取商户接口密钥')}</span>
</label>
<div class="layui-form-item">
<span class="help-label label-required-prev"><b>微信 V3 支付公钥文件</b>MCH_V3_PAYCERT</span>
<span class="help-label label-required-prev"><b>{:lang('微信 V3 支付公钥文件')}</b>MCH_V3_PAYCERT</span>
<div class="margin-top-10">
<div data-mch-type="pem" class="layui-tab-item">
<input type="hidden" name="wechat.mch_ssl_pay" value="{$mch_ssl_pay|default=''}">
<button data-file="btn" data-uptype="local" data-safe="true" data-type="pem" data-field="wechat.mch_ssl_pay" type="button" class="layui-btn font-code layui-btn-primary">
<i class="layui-icon layui-icon-vercode"></i> 上传微信支付公钥
<i class="layui-icon layui-icon-vercode"></i> {:lang('上传微信支付公钥')}
</button>
<a class="layui-btn layui-btn-danger layui-btn-primary ta-ml-5" onclick="$(this).prevAll('input').val('').trigger('change')"><i class="layui-icon layui-icon-close"></i></a>
</div>
@ -57,13 +57,13 @@
<div class="hr-line-dashed"></div>
<div class="layui-form-item">
<span class="help-label label-required-prev"><b>微信商户证书文件</b>MCH_CERT_FILE</span>
<span class="help-label label-required-prev"><b>{:lang('微信商户证书文件')}</b>MCH_CERT_FILE</span>
<div class="margin-top-10">
<!-- 'none'=>'暂不使用证书' -->
{foreach ['pem'=>'上传 PEM 证书', 'p12'=>'上传 P12 证书'] as $k=>$v}
<input type="radio" data-pem-type="{$k}" name="wechat.mch_ssl_type" value="{$k}" title="{$v}" lay-filter="data-mch-type">
{/foreach}
<p class="help-block font-code">请选择需要上传证书类型,上传 P12 证书会自动转换为 PEM 证书。</p>
<p class="help-block font-code">{:lang('请选择需要上传证书类型,上传 P12 证书会自动转换为 PEM 证书。')}</p>
<div class="padding-top-10">
<div data-mch-type="none"></div>
@ -97,7 +97,7 @@
<!--{if auth('payment_save')}-->
<div class="hr-line-dashed margin-top-30"></div>
<div class="layui-form-item text-center">
<button class="layui-btn" type="submit">保存配置</button>
<button class="layui-btn" type="submit">{:lang('保存配置')}</button>
</div>
<!--{/if}-->
</div>

View File

@ -2,16 +2,16 @@
{block name="button"}
<!--{if auth("black")}-->
<button data-action='{:url("black")}' data-table-id="UserData" data-rule="openid#{openid};black#1" class='layui-btn layui-btn-sm layui-btn-primary'>拉入黑名单</button>
<button data-action='{:url("black")}' data-table-id="UserData" data-rule="openid#{openid};black#0" class='layui-btn layui-btn-sm layui-btn-primary'>移出黑名单</button>
<button data-action='{:url("black")}' data-table-id="UserData" data-rule="openid#{openid};black#1" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('拉入黑名单')}</button>
<button data-action='{:url("black")}' data-table-id="UserData" data-rule="openid#{openid};black#0" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('移出黑名单')}</button>
<!--{/if}-->
<!--{if auth("truncate")}-->
<button data-load='{:url("truncate")}' data-confirm="确定要清空所有用户数据吗?" class='layui-btn layui-btn-sm layui-btn-primary'>清空用户数据</button>
<button data-load='{:url("truncate")}' data-confirm="{:lang('确定要清空所有用户数据吗?')}" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('清空用户数据')}</button>
<!--{/if}-->
<!--{if auth("sync")}-->
<button data-queue='{:url("sync")}' data-table-id="UserData" data-confirm="确定要创建同步用户数据的后台任务?" class='layui-btn layui-btn-sm layui-btn-primary'>同步用户数据</button>
<button data-queue='{:url("sync")}' data-table-id="UserData" data-confirm="{:lang('确定要创建同步用户数据的后台任务?')}" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('同步用户数据')}</button>
<!--{/if}-->
{/block}
@ -31,19 +31,19 @@
cols: [[
{checkbox: true},
{field: 'id', hide: true},
{field: 'headimg', title: '头像', width: 65, align: "center", templet: '<div>{{-$.layTable.showImage(d.headimgurl)}}</div>'},
{field: 'nickname', title: '微信昵称', align: "center", minWidth: 100, templet: '<div>{{d.nickname||"-"}}</div>'},
{field: 'province', title: '所在区域', align: "center", minWidth: 120, templet: '<div>{{d.country||"-"}} {{d.province}} {{d.city}}</div>'},
{field: 'sex', title: '性别', align: 'center', minWidth: 80, templet: '<div>{{d.sex==1 ? "男" : (d.sex==2 ? "女" : "未知")}}</div>'},
{field: 'language', title: '使用语言', align: 'center', minWidth: 100, templet: '<div>{{d.language}}</div>'},
{field: 'headimg', title: '{:lang("头像")}', width: 65, align: "center", templet: '<div>{{-$.layTable.showImage(d.headimgurl)}}</div>'},
{field: 'nickname', title: '{:lang("微信昵称")}', align: "center", minWidth: 100, templet: '<div>{{d.nickname||"-"}}</div>'},
{field: 'province', title: '{:lang("所在区域")}', align: "center", minWidth: 120, templet: '<div>{{d.country||"-"}} {{d.province}} {{d.city}}</div>'},
{field: 'sex', title: '{:lang("性别")}', align: 'center', minWidth: 80, templet: '<div>{{d.sex==1 ? "' + '{:lang("男")}' + '" : (d.sex==2 ? "' + '{:lang("女")}' + '" : "' + '{:lang("未知")}' + '")}}</div>'},
{field: 'language', title: '{:lang("使用语言")}', align: 'center', minWidth: 100, templet: '<div>{{d.language}}</div>'},
{
field: 'subscribe', title: '订阅状态', align: "center", minWidth: 90, templet: function (d) {
return d.subscribe > 0 ? '<span class="layui-badge layui-bg-green">已订阅</span>' : '<span class="layui-badge">未订阅</span>';
field: 'subscribe', title: '{:lang("订阅状态")}', align: "center", minWidth: 90, templet: function (d) {
return d.subscribe > 0 ? '<span class="layui-badge layui-bg-green">' + '{:lang("已订阅")}' + '</span>' : '<span class="layui-badge">' + '{:lang("未订阅")}' + '</span>';
}
},
{field: 'subscribe_time', title: '订阅时间', minWidth: 170, align: 'center', sort: true, templet: '<div>{{d.subscribe_at}}</div>'},
{field: 'is_black', title: '是否黑名单', align: 'center', minWidth: 110, templet: '#StatusSwitchTpl'},
{toolbar: '#toolbar', title: '操作面板', align: 'center', fixed: 'right', minWidth: 80}
{field: 'subscribe_time', title: '{:lang("订阅时间")}', minWidth: 170, align: 'center', sort: true, templet: '<div>{{d.subscribe_at}}</div>'},
{field: 'is_black', title: '{:lang("是否黑名单")}', align: 'center', minWidth: 110, templet: '#StatusSwitchTpl'},
{toolbar: '#toolbar', title: '{:lang("操作面板")}', align: 'center', fixed: 'right', minWidth: 80}
]]
});

View File

@ -3,18 +3,18 @@
<form class="layui-form layui-form-pane form-search" action="{:request()->url()}" onsubmit="return false" method="get" autocomplete="off">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">微信昵称</label>
<label class="layui-form-label">{:lang('微信昵称')}</label>
<label class="layui-input-inline">
<input name="nickname" value="{$get.nickname|default=''}" placeholder="请输入微信昵称" class="layui-input">
<input name="nickname" value="{$get.nickname|default=''}" placeholder="{:lang('请输入微信昵称')}" class="layui-input">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">订阅状态</label>
<label class="layui-form-label">{:lang('订阅状态')}</label>
<label class="layui-input-inline">
<select class="layui-select" name="subscribe">
<option value=''>-- 全部 --</option>
{foreach ['显示未订阅的粉丝','显示已订阅的粉丝'] as $k=>$v}
<option value=''>-- {:lang('全部')} --</option>
{foreach [lang('显示未订阅的粉丝'),lang('显示已订阅的粉丝')] as $k=>$v}
{if isset($get.subscribe) and $get.subscribe eq $k.""}
<option selected value="{$k}">{$v}</option>
{else}
@ -25,11 +25,11 @@
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">拉黑状态</label>
<label class="layui-form-label">{:lang('拉黑状态')}</label>
<label class="layui-input-inline">
<select class="layui-select" name="is_black">
<option value=''>-- 全部 --</option>
{foreach ['显示未拉黑的粉丝','显示已拉黑的粉丝'] as $k=>$v}
<option value=''>-- {:lang('全部')} --</option>
{foreach [lang('显示未拉黑的粉丝'),lang('显示已拉黑的粉丝')] as $k=>$v}
{if isset($get.is_black) and $get.is_black eq $k.""}
<option selected value="{$k}">{$v}</option>
{else}
@ -40,16 +40,16 @@
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">订阅时间</label>
<label class="layui-form-label">{:lang('订阅时间')}</label>
<label class="layui-input-inline">
<input data-date-range name="subscribe_at" value="{$get.subscribe_at|default=''}" placeholder="请选择订阅时间" class="layui-input">
<input data-date-range name="subscribe_at" value="{$get.subscribe_at|default=''}" placeholder="{:lang('请选择订阅时间')}" class="layui-input">
</label>
</div>
<div class="layui-form-item layui-inline">
<button type="submit" class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button type="submit" class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
<button type="button" data-form-export="{:url('index')}?type={$type|default=''}" class="layui-btn layui-btn-primary">
<i class="layui-icon layui-icon-export"></i>
<i class="layui-icon layui-icon-export"></i> {:lang('导 出')}
</button>
</div>
</form>
@ -58,7 +58,7 @@
<script>
require(['excel'], function (excel) {
excel.bind(function (data, sexs) {
sexs = {1: '男', 2: '女'};
sexs = {1: '{:lang("")}', 2: '{:lang("")}'};
data.forEach(function (item, index) {
data[index] = [
item.openid || '',
@ -66,19 +66,19 @@
item.country || '',
item.province || '',
item.city || '',
sexs[item.sex] || '未知',
item.subscribe ? '已订阅' : '未订阅',
sexs[item.sex] || '{:lang("未知")}',
item.subscribe ? '{:lang("已订阅")}' : '{:lang("未订阅")}',
item.subscribe_at || '',
item.is_black ? '已拉黑' : '未拉黑',
item.is_black ? '{:lang("已拉黑")}' : '{:lang("未拉黑")}',
];
});
// 设置表头内容
data.unshift(['OPENID', '微信昵称', '所在国家', '所在省份', '所在城市', '性别', '订阅状态', '订阅时间', '是否拉黑']);
data.unshift(['OPENID', '{:lang("微信昵称")}', '{:lang("所在国家")}', '{:lang("所在省份")}', '{:lang("所在城市")}', '{:lang("性别")}', '{:lang("订阅状态")}', '{:lang("订阅时间")}', '{:lang("是否拉黑")}']);
// 应用表格样式
return this.withStyle(data, {A: 200, H: 120});
}, '微信粉丝数据' + layui.util.toDateString(Date.now(), '_yyyyMMdd_HHmmss'));
}, '{:lang("微信粉丝数据")}' + layui.util.toDateString(Date.now(), '_yyyyMMdd_HHmmss'));
});
</script>

View File

@ -3,7 +3,7 @@
{block name='content'}
<div id="MenuEditor" class="layui-hide think-box-shadow" style="width:900px">
<div class='mobile-preview inline-block'>
<div class='mobile-header'>公众号</div>
<div class='mobile-header'>{:lang('公众号')}</div>
<div class='mobile-body'></div>
<ul class='mobile-footer notselect'>
<li class="parent-menu" style="{{getItemStyle(list)}}" ng-repeat="one in list">
@ -30,22 +30,22 @@
</div>
<div class="absolute inline-block layui-card margin-left-10" style="height:578px;width:570px">
<div class="layui-card-header layui-bg-gray text-center">菜单编辑</div>
<div class="layui-card-header layui-bg-gray text-center">{:lang('菜单编辑')}</div>
<div class="layui-card-body" ng-if="list.length<1">
<blockquote class="layui-elem-quote border-0 text-center">请在左侧创建菜单...</blockquote>
<blockquote class="layui-elem-quote border-0 text-center">{:lang('请在左侧创建菜单...')}</blockquote>
</div>
<div class="layui-card-body">
<form class="layui-form padding-right-40" name="menu" role="form" onsubmit="return false">
<div ng-if="list.length>0">
<div class="layui-form-item margin-top-20">
<label class="layui-form-label">菜单名称</label>
<label class="layui-form-label">{:lang('菜单名称')}</label>
<div class="layui-input-block">
<input required vali-name="菜单名称" ng-model="item.name" class="layui-input" placeholder="请输入菜单名称">
<span class="help-block">字数不超过13个汉字或40个字母</span>
<input required vali-name="{:lang('菜单名称')}" ng-model="item.name" class="layui-input" placeholder="{:lang('请输入菜单名称')}">
<span class="help-block">{:lang('字数不超过13个汉字或40个字母')}</span>
</div>
</div>
<div class="layui-form-item margin-top-20" ng-if="!item.sub_button||item.sub_button.length<1">
<label class="layui-form-label label-required">菜单类型</label>
<label class="layui-form-label label-required">{:lang('菜单类型')}</label>
<div class="layui-input-block">
{foreach $menuTypes as $key => $type}
<label class="think-radio layui-elip">

File diff suppressed because it is too large Load Diff

View File

@ -3,26 +3,26 @@
<div class="layui-form-item flex">
<div class="flex-1">
<span class="help-label label-required-prev"><b>等级序号</b>Serial</span>
<span class="help-label label-required-prev"><b>{:lang('等级序号')}</b>Serial</span>
<select class="layui-select" name="number" lay-filter="number">
{for start="0" end="$max" name="i"}{if isset($vo.number) and $vo.number eq $i}
<option selected value="{$i}">当前 VIP {$vo.number} 等级</option>
<option selected value="{$i}">{:lang('当前')} VIP {$vo.number} {:lang('等级')}</option>
{else}
<option value="{$i}">设置 VIP {$i} 等级</option>
<option value="{$i}">{:lang('设置')} VIP {$i} {:lang('等级')}</option>
{/if}{/for}
</select>
</div>
<label class="flex-3 ta-ml-15 relative">
<span class="help-label label-required-prev"><b>等级名称</b>Name</span>
<input class="layui-input" name="name" placeholder="请输入等级名称" required value="{$vo.name|default=''}">
<span class="help-label label-required-prev"><b>{:lang('等级名称')}</b>Name</span>
<input class="layui-input" name="name" placeholder="{:lang('请输入等级名称')}" required value="{$vo.name|default=''}">
</label>
</div>
<div class="layui-form-item">
<span class="help-label label-required-prev"><b>升级规则</b>Upgrades</span>
<span class="help-label label-required-prev"><b>{:lang('升级规则')}</b>Upgrades</span>
{empty name='vo.upgrade_type'}{assign name='vo.upgrade_type' value='1'}{/empty}
<div class="layui-textarea help-checks layui-bg-gray">
{foreach ['达成任意条件','达成全部条件'] as $k => $v}
{foreach [lang('达成任意条件'),lang('达成全部条件')] as $k => $v}
<label class="think-radio">
{if isset($vo.upgrade_type) and $vo.upgrade_type eq $k}
<input name="upgrade_type" type="radio" value="{$k}" lay-ignore checked> {$v}
@ -35,64 +35,64 @@
</div>
<div class="layui-form-item">
<span class="help-label label-required-prev"><b>升级条件</b>Upgrade Rules</span>
<span class="help-label label-required-prev"><b>{:lang('升级条件')}</b>Upgrade Rules</span>
<div class="layui-bg-gray layui-textarea help-checks relative flex flex-wrap ta-p-10">
{foreach ['teams_direct'=>'直接团队','teams_indirect'=>'间接团队','teams_total'=>'团队总数'] as $k=>$v}
{foreach ['teams_direct'=>lang('直接团队'),'teams_indirect'=>lang('间接团队'),'teams_total'=>lang('团队总数')] as $k=>$v}
<div class="upgrade-item-group">
{php}$ks = $k."_status";$kn = $k."_number";{/php}
{if isset($vo['extra'][$ks]) and $vo['extra'][$ks] eq 1}
<input name="extra.{$ks}" type="checkbox" value="1" lay-text="开启 {$v} 升级," checked>
<input name="extra.{$ks}" type="checkbox" value="1" lay-text="{:lang('开启')} {$v} {:lang('升级,')}" checked>
{else}
<input name="extra.{$ks}" type="checkbox" value="1" lay-text="开启 {$v} 升级,">
<input name="extra.{$ks}" type="checkbox" value="1" lay-text="{:lang('开启')} {$v} {:lang('升级,')}">
{/if}
<label class="font-s14">
达到 <input class="inline-block text-center min-input" name="extra.{$kn}"
data-blur-number="0" min="0" type="number" value="{$vo['extra'][$kn]|default='0'}"> 人;
{:lang('达到')} <input class="inline-block text-center min-input" name="extra.{$kn}"
data-blur-number="0" min="0" type="number" value="{$vo['extra'][$kn]|default='0'}"> {:lang('人;')}
</label>
</div>
{/foreach}
{foreach ['amount_direct'=>'直接总额','amount_indirect'=>'间接总额','amount_total'=>'团队总额'] as $k=>$v}
{foreach ['amount_direct'=>lang('直接总额'),'amount_indirect'=>lang('间接总额'),'amount_total'=>lang('团队总额')] as $k=>$v}
<div class="upgrade-item-group">
{php}$ks=$k."_status";$kn=$k."_number";{/php}
{if isset($vo['extra'][$ks]) and $vo['extra'][$ks] eq 1}
<input lay-text="开启 {$v} 升级," name="extra.{$ks}" type="checkbox" value="1" checked>
<input lay-text="{:lang('开启')} {$v} {:lang('升级,')}" name="extra.{$ks}" type="checkbox" value="1" checked>
{else}
<input lay-text="开启 {$v} 升级," name="extra.{$ks}" type="checkbox" value="1">
<input lay-text="{:lang('开启')} {$v} {:lang('升级,')}" name="extra.{$ks}" type="checkbox" value="1">
{/if}
<label class="font-s14">
达到 <input class="inline-block text-center min-input"
{:lang('达到')} <input class="inline-block text-center min-input"
name="extra.{$kn}" value="{$vo['extra'][$kn]|default='0.00'}"
data-blur-number="2" step="0.01" min="0" type="number"> 元;
data-blur-number="2" step="0.01" min="0" type="number"> {:lang('元;')}
</label>
</div>
{/foreach}
<div data-level-zero class="layui-hide notselect">默认等级,无需配置升级规则</div>
<div data-level-zero class="layui-hide notselect">{:lang('默认等级,无需配置升级规则')}</div>
</div>
</div>
<div class="layui-form-item layui-hide">
<span class="help-label"><b>等级图标</b>( 建议上传尺寸为 400x400 的图片或同比例图片 )</span>
<span class="help-label"><b>{:lang('等级图标')}</b>( {:lang('建议上传尺寸为 400x400 的图片或同比例图片')} )</span>
<div class="relative block">
<label>
<input class="layui-input layui-bg-gray" readonly placeholder="请上传等级封面" data-tips-hover data-tips-image name="cover" value='{$vo.cover|default=""}'>
<input class="layui-input layui-bg-gray" readonly placeholder="{:lang('请上传等级封面')}" data-tips-hover data-tips-image name="cover" value='{$vo.cover|default=""}'>
</label>
<a class="layui-icon layui-icon-upload input-right-icon" data-file data-field="cover" data-type="gif,png,jpg"></a>
</div>
</div>
<div class="layui-form-item layui-hide">
<span class="help-label"><b>卡片背景</b>( 建议上传尺寸为 650x330 的图片或同比例图片)</span>
<span class="help-label"><b>{:lang('卡片背景')}</b>( {:lang('建议上传尺寸为 650x330 的图片或同比例图片')} )</span>
<div class="relative block">
<label>
<input class="layui-input layui-bg-gray" readonly placeholder="请上传卡片背景" data-tips-hover data-tips-image name="cardbg" value='{$vo.cardbg|default=""}'>
<input class="layui-input layui-bg-gray" readonly placeholder="{:lang('请上传卡片背景')}" data-tips-hover data-tips-image name="cardbg" value='{$vo.cardbg|default=""}'>
</label>
<a class="layui-icon layui-icon-upload input-right-icon" data-file data-field="cardbg" data-type="gif,png,jpg"></a>
</div>
</div>
<label class="layui-form-item">
<span class="help-label"><b>系统备注</b>System Remark</span>
<textarea class="layui-textarea" name="remark" placeholder="请输入系统备注">{$vo.remark|default=''}</textarea>
<span class="help-label"><b>{:lang('系统备注')}</b>System Remark</span>
<textarea class="layui-textarea" name="remark" placeholder="{:lang('请输入系统备注')}">{$vo.remark|default=''}</textarea>
</label>
</div>
@ -102,8 +102,8 @@
{if isset($vo.number)}<input name='old_number' type='hidden' value='{$vo.number}'>{/if}
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" data-close data-confirm="确定要取消编辑吗?" type='button'>取消编辑</button>
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" data-close data-confirm="{:lang('确定要取消编辑吗?')}" type='button'>{:lang('取消编辑')}</button>
</div>
</form>

View File

@ -2,7 +2,7 @@
{block name="button"}
<!--{if auth("add")}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="LevelTable" data-modal="{:url('add')}">添加等级</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="LevelTable" data-modal="{:url('add')}">{:lang('添加等级')}</button>
<!--{/if}-->
{/block}
@ -21,46 +21,46 @@
even: true, height: 'full',
sort: {field: 'number', type: 'asc'},
cols: [[
{field: 'number', title: '序号', align: "center", minWidth: 70, width: '5%', sort: true},
{field: 'cover', title: '图标', width: 70, align: 'center', templet: '<div>{{-$.layTable.showImage(d.cover)}}</div>'},
{field: 'name', title: '等级名称', align: 'center', minWidth: 80, width: '12%'},
{field: 'number', title: '{:lang("序号")}', align: "center", minWidth: 70, width: '5%', sort: true},
{field: 'cover', title: '{:lang("图标")}', width: 70, align: 'center', templet: '<div>{{-$.layTable.showImage(d.cover)}}</div>'},
{field: 'name', title: '{:lang("等级名称")}', align: 'center', minWidth: 80, width: '12%'},
{
title: '升级规则', align: 'center', minWidth: 80, templet: function (d) {
return d.upgrade_type === 1 ? '<span class="color-green">全部达成</span>' : '<span class="color-blue">任意条件</span>';
title: '{:lang("升级规则")}', align: 'center', minWidth: 80, templet: function (d) {
return d.upgrade_type === 1 ? '<span class="color-green">' + '{:lang("全部达成")}' + '</span>' : '<span class="color-blue">' + '{:lang("任意条件")}' + '</span>';
}
},
{
title: '团队总人数', align: 'center', minWidth: 80, templet: function (d) {
return d.extra.teams_total_status ? laytpl('<b>{{d.extra.teams_total_number}}</b> 人').render(d) : '-';
title: '{:lang("团队总人数")}', align: 'center', minWidth: 80, templet: function (d) {
return d.extra.teams_total_status ? laytpl('<b>{{d.extra.teams_total_number}}</b> {:lang("")}').render(d) : '-';
}
},
{
title: '直属团队人数', align: 'center', minWidth: 80, templet: function (d) {
return d.extra.teams_direct_status ? laytpl('<b>{{d.extra.teams_direct_number}}</b> 人').render(d) : '-';
title: '{:lang("直属团队人数")}', align: 'center', minWidth: 80, templet: function (d) {
return d.extra.teams_direct_status ? laytpl('<b>{{d.extra.teams_direct_number}}</b> {:lang("")}').render(d) : '-';
}
},
{
title: '间接团队人数', align: 'center', minWidth: 80, templet: function (d) {
return d.extra.teams_indirect_status ? laytpl('<b>{{d.extra.teams_indirect_number}}</b> 人').render(d) : '-';
title: '{:lang("间接团队人数")}', align: 'center', minWidth: 80, templet: function (d) {
return d.extra.teams_indirect_status ? laytpl('<b>{{d.extra.teams_indirect_number}}</b> {:lang("")}').render(d) : '-';
}
},
{
title: '团队总额', align: 'center', minWidth: 80, templet: function (d) {
return d.extra.amount_total_status ? laytpl('<b>{{d.extra.amount_total_number}} 元</b>').render(d) : '-';
title: '{:lang("团队总额")}', align: 'center', minWidth: 80, templet: function (d) {
return d.extra.amount_total_status ? laytpl('<b>{{d.extra.amount_total_number}} {:lang("")}</b>').render(d) : '-';
}
},
{
title: '直属团队总额', align: 'center', minWidth: 80, templet: function (d) {
return d.extra.amount_direct_status ? laytpl('<b>{{d.extra.amount_direct_number}}</b> 元').render(d) : '-';
title: '{:lang("直属团队总额")}', align: 'center', minWidth: 80, templet: function (d) {
return d.extra.amount_direct_status ? laytpl('<b>{{d.extra.amount_direct_number}}</b> {:lang("")}').render(d) : '-';
}
},
{
title: '间接团队总额', align: 'center', minWidth: 80, templet: function (d) {
return d.extra.amount_indirect_status ? laytpl('<b>{{d.extra.amount_indirect_number}} 元</b>').render(d) : '-';
title: '{:lang("间接团队总额")}', align: 'center', minWidth: 80, templet: function (d) {
return d.extra.amount_indirect_status ? laytpl('<b>{{d.extra.amount_indirect_number}} {:lang("")}</b>').render(d) : '-';
}
},
{field: 'status', title: '等级状态', align: 'center', minWidth: 110, width: '8%', templet: '#StatusSwitchTpl'},
{toolbar: '#toolbar', title: '操作面板', align: 'center', minWidth: 150, fixed: 'right'},
{field: 'status', title: '{:lang("等级状态")}', align: 'center', minWidth: 110, width: '8%', templet: '#StatusSwitchTpl'},
{toolbar: '#toolbar', title: '{:lang("操作面板")}', align: 'center', minWidth: 150, fixed: 'right'},
]]
});
@ -84,19 +84,19 @@
<!-- 数据状态切换模板 -->
<script type="text/html" id="StatusSwitchTpl">
<!--{if auth("state")}-->
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="已激活|已禁用" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="{:lang('已激活')}|{:lang('已禁用')}" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<!--{else}-->
{{-d.status ? '<b class="color-green">已启用</b>' : '<b class="color-red">已禁用</b>'}}
{{-d.status ? '<b class="color-green">' + '{:lang("已启用")}' + '</b>' : '<b class="color-red">' + '{:lang("已禁用")}' + '</b>'}}
<!--{/if}-->
</script>
<!-- 数据操作工具条模板 -->
<script type="text/html" id="toolbar">
<!--{if auth('edit')}-->
<a class="layui-btn layui-btn-primary layui-btn-sm" data-table-id="LevelTable" data-title="编辑等级" data-modal='{:url("edit")}?id={{d.id}}'> </a>
<a class="layui-btn layui-btn-primary layui-btn-sm" data-table-id="LevelTable" data-title="{:lang('编辑等级')}" data-modal='{:url("edit")}?id={{d.id}}'>{:lang('编 辑')}</a>
<!--{/if}-->
<!--{if auth("remove")}-->
<a class="layui-btn layui-btn-danger layui-btn-sm" data-confirm="确定要删除等级吗?" data-action="{:url('remove')}" data-value="id#{{d.id}}"> </a>
<a class="layui-btn layui-btn-danger layui-btn-sm" data-confirm="{:lang('确定要删除等级吗?')}" data-action="{:url('remove')}" data-value="id#{{d.id}}">{:lang('删 除')}</a>
<!--{/if}-->
</script>
{/block}

View File

@ -3,18 +3,18 @@
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-form-pane form-search" method="get" onsubmit="return false">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">等级名称</label>
<label class="layui-form-label">{:lang('等级名称')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="name" placeholder="请输入等级名称" value="{$get.name|default=''}">
<input class="layui-input" name="name" placeholder="{:lang('请输入等级名称')}" value="{$get.name|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">等级状态</label>
<label class="layui-form-label">{:lang('等级状态')}</label>
<div class="layui-input-inline">
<select name="status">
<option value="">-- 全部 --</option>
{foreach ['已禁用', '已激活'] as $k=>$v}
<option value="">{:lang('-- 全部 --')}</option>
{foreach [lang('已禁用'), lang('已激活')] as $k=>$v}
{if input('status') eq $k.''}
<option selected value="{$k}">{$v}</option>
{else}
@ -25,14 +25,14 @@
</div>
<div class="layui-form-item layui-hide">
<label class="layui-form-label">创建时间</label>
<label class="layui-form-label">{:lang('创建时间')}</label>
<div class="layui-input-inline">
<input class="layui-input" data-date-range name="create_time" placeholder="请选择创建时间" value="{$get.create_time|default=''}">
<input class="layui-input" data-date-range name="create_time" placeholder="{:lang('请选择创建时间')}" value="{$get.create_time|default=''}">
</div>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
</div>
</form>
</fieldset>

View File

@ -16,76 +16,76 @@
</div>
<div class="layui-card-body">
<div class="layui-form-item">
<div class="help-label"><b>{:lang('商城名称')}</b>Name</div>
<label class="relative block">
<input readonly value="{$data.base_name|default=''}" placeholder="请设置商城名称" class="layui-input layui-bg-gray">
<div class="help-label"><b>{:lang('商城名称')}</b>Name</div>
<label class="relative block">
<input readonly value="{$data.base_name|default=''}" placeholder="{:lang('请设置商城名称')}" class="layui-input layui-bg-gray">
</label>
<p class="help-block">{:lang('请填写商城名称,将会在前端部分内容显示。')}</p>
</div>
<label class="layui-form-item relative block">
<span class="help-label"><b>{:lang('手机网站')}</b>WapSite</span>
<input readonly class="layui-input layui-bg-gray" placeholder="{:lang('请输入手机网站')}" value='{$data.base_domain|default=""}'>
<span class="help-block"><b>{:lang('必填,')}</b>{:lang('请填写手机网站入口,将使用在生成手机网页端访问链接。')}</span>
</label>
<p class="help-block">请填写商城名称,将会在前端部分内容显示。</p>
</div>
<label class="layui-form-item relative block">
<span class="help-label"><b>{:lang('手机网站')}</b>WapSite</span>
<input readonly class="layui-input layui-bg-gray" placeholder="请输入手机网站" value='{$data.base_domain|default=""}'>
<span class="help-block"><b>必填,</b>请填写手机网站入口,将使用在生成手机网页端访问链接。</span>
</label>
<div class="layui-form-item">
<div class="help-label"><b>{:lang('账户余额')}</b>Balance</div>
<div class="layui-input layui-bg-gray flex-align-center">
{empty name='data.enable_balance'}
<i class="layui-icon layui-icon-error ta-mr-5 color-red"></i>未启用账户余额
{else}
<i class="layui-icon layui-icon-success color-green ta-mr-5"></i>已启用账户余额
{/empty}
<div class="layui-form-item">
<div class="help-label"><b>{:lang('账户余额')}</b>Balance</div>
<div class="layui-input layui-bg-gray flex-align-center">
{empty name='data.enable_balance'}
<i class="layui-icon layui-icon-error ta-mr-5 color-red"></i>{:lang('未启用账户余额')}
{else}
<i class="layui-icon layui-icon-success color-green ta-mr-5"></i>{:lang('已启用账户余额')}
{/empty}
</div>
<span class="help-block">{:lang('开启账户余额之后,用户会增加余额账户,可以积累余额并可使用余额抵扣支付。')}</span>
</div>
<span class="help-block">开启账户余额之后,用户会增加余额账户,可以积累余额并可使用余额抵扣支付。</span>
</div>
<div class="layui-form-item">
<div class="help-label"><b>{:lang('账户积分')}</b>Integral</div>
<div class="layui-input flex-align-center layui-bg-gray">
{empty name='data.enable_integral'}
<i class="layui-icon layui-icon-error color-red ta-mr-5"></i>未启用账户积分
{else}
<i class="layui-icon layui-icon-success color-green ta-mr-5"></i>已启用账户积分
{/empty}
<div class="layui-form-item">
<div class="help-label"><b>{:lang('账户积分')}</b>Integral</div>
<div class="layui-input flex-align-center layui-bg-gray">
{empty name='data.enable_integral'}
<i class="layui-icon layui-icon-error color-red ta-mr-5"></i>{:lang('未启用账户积分')}
{else}
<i class="layui-icon layui-icon-success color-green ta-mr-5"></i>{:lang('已启用账户积分')}
{/empty}
</div>
<span class="help-block">{:lang('开启账户积分之后,用户会增加积分账户,可以积累积分并可使用积分抵扣支付。')}</span>
</div>
<span class="help-block">开启账户积分之后,用户会增加积分账户,可以积累积分并可使用积分抵扣支付。</span>
</div>
<div class="layui-form-item">
<div class="help-label"><b>{:lang('下单随减')}</b>Reduction</div>
<div class="layui-input flex-align-center layui-bg-gray">
{empty name='data.enable_reduct'}
<i class="layui-icon layui-icon-error color-red ta-mr-5"></i> 未启用下单随机减免金额
{else}
<i class="layui-icon layui-icon-success color-green font-s15 ta-mr-5"></i>
已启用下单随机减免金额,减免范围 [ {$data.reduct_min|default=0.00} - {$data.reduct_max|default=0.00} ]
{/empty}
<div class="layui-form-item">
<div class="help-label"><b>{:lang('下单随减')}</b>Reduction</div>
<div class="layui-input flex-align-center layui-bg-gray">
{empty name='data.enable_reduct'}
<i class="layui-icon layui-icon-error color-red ta-mr-5"></i> {:lang('未启用下单随机减免金额')}
{else}
<i class="layui-icon layui-icon-success color-green font-s15 ta-mr-5"></i>
{:lang('已启用下单随机减免金额,减免范围')} [ {$data.reduct_min|default=0.00} - {$data.reduct_max|default=0.00} ] {:lang('元')}
{/empty}
</div>
<span class="help-block">{:lang('开启下单随减后,用户每次下单都会随机减免一定金额,最多不会超过订单金额。')}</span>
</div>
<span class="help-block">开启下单随减后,用户每次下单都会随机减免一定金额,最多不会超过订单金额。</span>
</div>
<div class="layui-form-item ta-mb-0">
<div class="layui-row layui-col-space10 portal-block-container notselect ta-mb-0">
<div class="help-label"><b>{:lang('内容管理')}</b>Content</div>
{foreach $pages as $k => $v}
<div class="layui-col-sm4 layui-col-md4 layui-col-lg3">
<!--{if auth('content')}-->
<div class="pointer" data-open="{:url('content')}?code={$k}">
<div class="portal-block-item nowrap think-bg-blue">
<div class="font-s14" style="opacity:0.8">编辑内容</div>
<div class="layui-form-item ta-mb-0">
<div class="layui-row layui-col-space10 portal-block-container notselect ta-mb-0">
<div class="help-label"><b>{:lang('内容管理')}</b>Content</div>
{foreach $pages as $k => $v}
<div class="layui-col-sm4 layui-col-md4 layui-col-lg3">
<!--{if auth('content')}-->
<div class="pointer" data-open="{:url('content')}?code={$k}">
<div class="portal-block-item nowrap think-bg-blue">
<div class="font-s14" style="opacity:0.8">{:lang('编辑内容')}</div>
<div class="font-s15" style="opacity:0.8">{$v|default=''}</div>
</div>
<i class="portal-block-icon layui-icon layui-icon-form"></i>
</div>
<!--{else}-->
<div class="portal-block-item nowrap think-bg-violet">
<div class="font-s14" style="opacity:0.6">{:lang('编辑内容')}</div>
<div class="font-s15" style="opacity:0.8">{$v|default=''}</div>
</div>
<i class="portal-block-icon layui-icon layui-icon-form"></i>
<!--{/if}-->
</div>
<!--{else}-->
<div class="portal-block-item nowrap think-bg-violet">
<div class="font-s14" style="opacity:0.6">编辑内容</div>
<div class="font-s15" style="opacity:0.8">{$v|default=''}</div>
</div>
<i class="portal-block-icon layui-icon layui-icon-form"></i>
<!--{/if}-->
{/foreach}
</div>
{/foreach}
</div>
</div>
</div>
</div>
<!--{/if}-->

View File

@ -1,8 +1,8 @@
{extend name="main"}
{block name="button"}
<button data-target-submit class='layui-btn layui-btn-sm'>保存数据</button>
<button data-target-backup class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="确认要取消编辑吗?">取消编辑</button>
<button data-target-submit class='layui-btn layui-btn-sm'>{:lang('保存数据')}</button>
<button data-target-backup class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="{:lang('确认要取消编辑吗?')}">{:lang('取消编辑')}</button>
{/block}
{block name='content'}
@ -10,12 +10,12 @@
<div class="layui-card-body">
<label class="layui-form-item relative block">
<span class="help-label"><b>内容标题</b>Name</span>
<input class="layui-input" name="name" placeholder="请输入内容标题" required value='{$data.name|default=""}'>
<span class="help-label"><b>{:lang('内容标题')}</b>Name</span>
<input class="layui-input" name="name" placeholder="{:lang('请输入内容标题')}" required value='{$data.name|default=""}'>
</label>
<div class="layui-form-item label-required-prev">
<span class="help-label"><b>富文本内容</b>Content</span>
<span class="help-label"><b>{:lang('富文本内容')}</b>Content</span>
<textarea class="layui-hide" name="content">{$data.content|default=""}</textarea>
</div>
@ -23,8 +23,8 @@
<input type="hidden" name="code" value="{$get.code|default=''}">
<div class="layui-form-item text-center">
<button class="layui-btn" type="submit">保存数据</button>
<button class="layui-btn layui-btn-danger" data-confirm="确定要取消编辑吗?" data-target-backup type='button'>取消编辑</button>
<button class="layui-btn" type="submit">{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" data-confirm="{:lang('确定要取消编辑吗?')}" data-target-backup type='button'>{:lang('取消编辑')}</button>
</div>
</div>

View File

@ -4,10 +4,10 @@
<div class="layui-form-item ">
<div class="flex">
<div>
<span class="help-label label-required-prev"><b>下单随减</b>Order Reduction</span>
<span class="help-label label-required-prev"><b>{:lang('下单随减')}</b>Order Reduction</span>
<div class="layui-input help-checks ta-pl-15 flex flex-align-center layui-bg-gray">
{empty name='vo.enable_reduct'}{assign name='vo.enable_reduct' value='0'}{/empty}
{foreach ['禁用','启用'] as $k=>$n}{if (isset($vo.enable_reduct) && $vo.enable_reduct eq $k)}
{foreach [lang('禁用'),lang('启用')] as $k=>$n}{if (isset($vo.enable_reduct) && $vo.enable_reduct eq $k)}
<input checked type="radio" name="enable_reduct" value="{$k}" title="{$n}">
{else}
<input type="radio" name="enable_reduct" value="{$k}" title="{$n}">
@ -15,26 +15,26 @@
</div>
</div>
<div class="ta-ml-15 flex-1">
<span class="help-label label-required-prev"><b>减免金额</b></span>
<span class="help-label label-required-prev"><b>{:lang('减免金额')}</b></span>
<label class="layui-input layui-bg-gray layui-input-group ta-pl-0">
<span class="layui-input-prefix"></span>
<span class="layui-input-prefix">{:lang('')}</span>
<input class="layui-input border-0 text-center" type="number" lay-affix="number" step="0.01" lay-precision="2" min="0" name="reduct_min" value='{$vo.reduct_min|default="0.00"}'>
<span class="layui-input-suffix">元至</span>
<span class="layui-input-suffix">{:lang('元至')}</span>
<input class="layui-input border-0 text-center" type="number" lay-affix="number" step="0.01" lay-precision="2" min="0" name="reduct_max" value='{$vo.reduct_max|default="0.00"}'>
<span class="layui-input-suffix"></span>
<span class="layui-input-suffix">{:lang('')}</span>
</label>
</div>
</div>
<span class="help-block">开启下单随减后,用户每次下单都会随机减免一定金额,最多不会超过订单金额。</span>
<span class="help-block">{:lang('开启下单随减后,用户每次下单都会随机减免一定金额,最多不会超过订单金额。')}</span>
</div>
<div class="layui-form-item">
<div class="flex">
<div>
<span class="help-label label-required-prev"><b>自动清除</b>Auto Remove</span>
<span class="help-label label-required-prev"><b>{:lang('自动清除')}</b>Auto Remove</span>
<div class="layui-input help-checks ta-pl-15 flex flex-align-center layui-bg-gray">
{empty name='vo.remove_auto'}{assign name='vo.remove_auto' value='0'}{/empty}
{foreach ['禁用','启用'] as $k=>$n}{if (isset($vo.remove_auto) && $vo.remove_auto eq $k)}
{foreach [lang('禁用'),lang('启用')] as $k=>$n}{if (isset($vo.remove_auto) && $vo.remove_auto eq $k)}
<input checked type="radio" name="remove_auto" value="{$k}" title="{$n}">
{else}
<input type="radio" name="remove_auto" value="{$k}" title="{$n}">
@ -42,27 +42,27 @@
</div>
</div>
<label class="ta-ml-15 block relative">
<span class="help-label label-required-prev"><b>延时执行</b>填写 0 立即清理订单</span>
<span class="help-label label-required-prev"><b>{:lang('延时执行')}</b>{:lang('填写 0 立即清理订单')}</span>
<label class="layui-input-group layui-bg-gray">
<input class="layui-input text-center" name="remove_time" type="number" lay-affix="number" lay-precision="2" step="0.01" min="0" placeholder="请输入延时时间" value="{$vo.remove_time|default='0'}"/>
<span class="layui-input-suffix layui-input-split nowrap">小时</span>
<input class="layui-input text-center" name="remove_time" type="number" lay-affix="number" lay-precision="2" step="0.01" min="0" placeholder="{:lang('请输入延时时间')}" value="{$vo.remove_time|default='0'}"/>
<span class="layui-input-suffix layui-input-split nowrap">{:lang('小时')}</span>
</label>
</label>
<label class="ta-ml-15 block relative flex-1">
<span class="help-label"><b>自动清理描述</b></span>
<input name="remove_text" class="layui-input" placeholder="请输入自动清理描述" value="{$vo.remove_text|default=''}"/>
<span class="help-label"><b>{:lang('自动清理描述')}</b></span>
<input name="remove_text" class="layui-input" placeholder="{:lang('请输入自动清理描述')}" value="{$vo.remove_text|default=''}"/>
</label>
</div>
<span class="help-block">开启自动清理后,当订单已经取消并没有支付信息时会根据配置自动清除!</span>
<span class="help-block">{:lang('开启自动清理后,当订单已经取消并没有支付信息时会根据配置自动清除!')}</span>
</div>
<div class="layui-form-item">
<div class="flex">
<div>
<span class="help-label label-required-prev"><b>自动取消</b>Auto Cancel</span>
<span class="help-label label-required-prev"><b>{:lang('自动取消')}</b>Auto Cancel</span>
<div class="layui-input help-checks ta-pl-15 flex flex-align-center layui-bg-gray">
{empty name='vo.cancel_auto'}{assign name='vo.cancel_auto' value='0'}{/empty}
{foreach ['禁用','启用'] as $k=>$n}{if (isset($vo.cancel_auto) && $vo.cancel_auto eq $k)}
{foreach [lang('禁用'),lang('启用')] as $k=>$n}{if (isset($vo.cancel_auto) && $vo.cancel_auto eq $k)}
<input checked type="radio" name="cancel_auto" value="{$k}" title="{$n}">
{else}
<input type="radio" name="cancel_auto" value="{$k}" title="{$n}">
@ -70,27 +70,27 @@
</div>
</div>
<label class="ta-ml-15 block relative">
<span class="help-label label-required-prev"><b>延时执行</b>不支持立即取消订单</span>
<span class="help-label label-required-prev"><b>{:lang('延时执行')}</b>{:lang('不支持立即取消订单')}</span>
<label class="layui-input-group layui-bg-gray">
<input class="layui-input text-center" name="cancel_time" type="number" lay-affix="number" lay-precision="2" step="0.01" min="0.01" placeholder="请输入延时时间" value="{$vo.cancel_time|default='0.5'}"/>
<span class="layui-input-suffix layui-input-split nowrap">小时</span>
<input class="layui-input text-center" name="cancel_time" type="number" lay-affix="number" lay-precision="2" step="0.01" min="0.01" placeholder="{:lang('请输入延时时间')}" value="{$vo.cancel_time|default='0.5'}"/>
<span class="layui-input-suffix layui-input-split nowrap">{:lang('小时')}</span>
</label>
</label>
<label class="ta-ml-15 block relative flex-1">
<span class="help-label"><b>自动取消描述</b></span>
<input name="cancel_text" class="layui-input" placeholder="请输入自动取消描述" value="{$vo.cancel_text|default=''}"/>
<span class="help-label"><b>{:lang('自动取消描述')}</b></span>
<input name="cancel_text" class="layui-input" placeholder="{:lang('请输入自动取消描述')}" value="{$vo.cancel_text|default=''}"/>
</label>
</div>
<span class="help-block">开启自动取消后,当订单在指定时间内未完成支付时会自动取消订单并返还商品库存!</span>
<span class="help-block">{:lang('开启自动取消后,当订单在指定时间内未完成支付时会自动取消订单并返还商品库存!')}</span>
</div>
<div class="layui-form-item">
<div class="flex">
<div>
<span class="help-label label-required-prev"><b>自动签收</b>Auto Receipt</span>
<span class="help-label label-required-prev"><b>{:lang('自动签收')}</b>Auto Receipt</span>
<div class="layui-input help-checks ta-pl-15 flex flex-align-center layui-bg-gray">
{empty name='vo.receipt_auto'}{assign name='vo.receipt_auto' value='0'}{/empty}
{foreach ['禁用','启用'] as $k=>$n}{if (isset($vo.receipt_auto) && $vo.receipt_auto eq $k)}
{foreach [lang('禁用'),lang('启用')] as $k=>$n}{if (isset($vo.receipt_auto) && $vo.receipt_auto eq $k)}
<input checked type="radio" name="receipt_auto" value="{$k}" title="{$n}">
{else}
<input type="radio" name="receipt_auto" value="{$k}" title="{$n}">
@ -98,27 +98,27 @@
</div>
</div>
<label class="ta-ml-15 block relative">
<span class="help-label label-required-prev"><b>延时执行</b>填写 0 立即完成签收</span>
<span class="help-label label-required-prev"><b>{:lang('延时执行')}</b>{:lang('填写 0 立即完成签收')}</span>
<label class="layui-input-group layui-bg-gray">
<input class="layui-input text-center" name="receipt_time" type="number" lay-affix="number" lay-precision="2" step="0.01" min="0" placeholder="请输入延时时间" value="{$vo.receipt_time|default='0'}"/>
<span class="layui-input-suffix layui-input-split nowrap">小时</span>
<input class="layui-input text-center" name="receipt_time" type="number" lay-affix="number" lay-precision="2" step="0.01" min="0" placeholder="{:lang('请输入延时时间')}" value="{$vo.receipt_time|default='0'}"/>
<span class="layui-input-suffix layui-input-split nowrap">{:lang('小时')}</span>
</label>
</label>
<label class="ta-ml-15 block relative flex-1">
<span class="help-label"><b>自动签收描述</b></span>
<input name="receipt_text" class="layui-input" placeholder="请输入自动签收描述" value="{$vo.receipt_text|default=''}"/>
<span class="help-label"><b>{:lang('自动签收描述')}</b></span>
<input name="receipt_text" class="layui-input" placeholder="{:lang('请输入自动签收描述')}" value="{$vo.receipt_text|default=''}"/>
</label>
</div>
<span class="help-block">开启自动签收后,当订单发货后会根据配置自动完成订单签收!</span>
<span class="help-block">{:lang('开启自动签收后,当订单发货后会根据配置自动完成订单签收!')}</span>
</div>
<div class="layui-form-item ">
<div class="flex">
<div>
<span class="help-label label-required-prev"><b>自动评论</b>Auto Comment</span>
<span class="help-label label-required-prev"><b>{:lang('自动评论')}</b>Auto Comment</span>
<div class="layui-input help-checks ta-pl-15 flex flex-align-center layui-bg-gray">
{empty name='vo.comment_auto'}{assign name='vo.comment_auto' value='0'}{/empty}
{foreach ['禁用','启用'] as $k=>$n}{if (isset($vo.comment_auto) && $vo.comment_auto eq $k)}
{foreach [lang('禁用'),lang('启用')] as $k=>$n}{if (isset($vo.comment_auto) && $vo.comment_auto eq $k)}
<input checked type="radio" name="comment_auto" value="{$k}" title="{$n}">
{else}
<input type="radio" name="comment_auto" value="{$k}" title="{$n}">
@ -126,18 +126,18 @@
</div>
</div>
<div class="ta-ml-15">
<span class="help-label label-required-prev"><b>延时执行</b>填写 0 立即完成评论</span>
<span class="help-label label-required-prev"><b>{:lang('延时执行')}</b>{:lang('填写 0 立即完成评论')}</span>
<label class="layui-input-group layui-bg-gray">
<input class="layui-input text-center" name="comment_time" type="number" lay-affix="number" lay-precision="2" step="0.01" min="0" placeholder="请输入延时时间" value="{$vo.comment_time|default='0'}"/>
<span class="layui-input-suffix layui-input-split nowrap">小时</span>
<input class="layui-input text-center" name="comment_time" type="number" lay-affix="number" lay-precision="2" step="0.01" min="0" placeholder="{:lang('请输入延时时间')}" value="{$vo.comment_time|default='0'}"/>
<span class="layui-input-suffix layui-input-split nowrap">{:lang('小时')}</span>
</label>
</div>
<label class="ta-ml-15 block relative flex-1">
<span class="help-label"><b>自动评论内容</b></span>
<input name="comment_text" class="layui-input" placeholder="请输入自动评论内容" value="{$vo.comment_text|default=''}"/>
<span class="help-label"><b>{:lang('自动评论内容')}</b></span>
<input name="comment_text" class="layui-input" placeholder="{:lang('请输入自动评论内容')}" value="{$vo.comment_text|default=''}"/>
</label>
</div>
<span class="help-block">开启自动评论后,当订单确认签收后会根据配置自动完成订单评论!</span>
<span class="help-block">{:lang('开启自动评论后,当订单确认签收后会根据配置自动完成订单评论!')}</span>
</div>
</div>
@ -145,7 +145,7 @@
<div class="hr-line-dashed"></div>
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" data-close type='button' data-confirm="确定要取消编辑吗?">取消编辑</button>
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" data-close type='button' data-confirm="{:lang('确定要取消编辑吗?')}">{:lang('取消编辑')}</button>
</div>
</form>

View File

@ -3,86 +3,86 @@
<div class="flex">
<label class="relative block layui-form-item flex-1">
<span class="help-label"><b>商城名称</b>Name</span>
<input class="layui-input" name="base_name" placeholder="请输入商城名称" required value='{$vo.base_name|default=""}'>
<span class="help-block">名称将显示在前端关于我们及登录页面。</span>
<span class="help-label"><b>{:lang('商城名称')}</b>Name</span>
<input class="layui-input" name="base_name" placeholder="{:lang('请输入商城名称')}" required value='{$vo.base_name|default=""}'>
<span class="help-block">{:lang('名称将显示在前端关于我们及登录页面。')}</span>
</label>
<label class="relative block layui-form-item flex-2 ta-ml-15">
<span class="help-label"><b>手机网站</b>WapSite</span>
<input class="layui-input" pattern="url" name="base_domain" placeholder="请输入手机网站" required value='{$vo.base_domain|default=""}'>
<span class="help-block">请填写手机网站入口,如果使用 Hash 方案编译生成手机网页需要以 # 结束。</span>
<span class="help-label"><b>{:lang('手机网站')}</b>WapSite</span>
<input class="layui-input" pattern="url" name="base_domain" placeholder="{:lang('请输入手机网站')}" required value='{$vo.base_domain|default=""}'>
<span class="help-block">{:lang('请填写手机网站入口,如果使用 Hash 方案编译生成手机网页需要以 # 结束。')}</span>
</label>
</div>
<div class="flex">
<div class="layui-form-item flex-1">
<span class="help-label label-required-prev"><b>账户余额</b>User Balance</span>
<span class="help-label label-required-prev"><b>{:lang('账户余额')}</b>User Balance</span>
<div class="layui-textarea help-checks layui-bg-gray ta-pl-15">
{empty name='vo.enable_balance'}{assign name='vo.enable_balance' value='0'}{/empty}
{foreach ['禁用账户余额','启用账户余额'] as $k=>$n}
{foreach [lang('禁用账户余额'),lang('启用账户余额')] as $k=>$n}
{if (isset($vo.enable_balance) && $vo.enable_balance eq $k)}
<input checked type="radio" name="enable_balance" value="{$k}" title="{$n}">
{else}
<input type="radio" name="enable_balance" value="{$k}" title="{$n}">
{/if}{/foreach}
</div>
<span class="help-block">开启账户余额之后,可以积累余额并可使用余额抵扣支付。</span>
<span class="help-block">{:lang('开启账户余额之后,可以积累余额并可使用余额抵扣支付。')}</span>
</div>
<div class="layui-form-item flex-1 ta-ml-15">
<span class="help-label label-required-prev"><b>账户积分</b>User Integral</span>
<span class="help-label label-required-prev"><b>{:lang('账户积分')}</b>User Integral</span>
<div class="layui-textarea help-checks layui-bg-gray ta-pl-15">
{empty name='vo.enable_integral'}{assign name='vo.enable_integral' value='0'}{/empty}
{foreach ['禁用账户积分','启用账户积分'] as $k=>$n}
{foreach [lang('禁用账户积分'),lang('启用账户积分')] as $k=>$n}
{if (isset($vo.enable_integral) && $vo.enable_integral eq $k)}
<input checked type="radio" name="enable_integral" value="{$k}" title="{$n}">
{else}
<input type="radio" name="enable_integral" value="{$k}" title="{$n}">
{/if}{/foreach}
</div>
<span class="help-block">开启账户积分之后,可以积累积分并可使用积分抵扣支付。</span>
<span class="help-block">{:lang('开启账户积分之后,可以积累积分并可使用积分抵扣支付。')}</span>
</div>
</div>
{notempty name='enableAndroid'}
<div class="flex">
<div class="layui-form-item flex-1">
<span class="help-label label-required-prev"><b>手机站点</b>WapSite</span>
<span class="help-label label-required-prev"><b>{:lang('手机站点')}</b>WapSite</span>
<div class="layui-textarea help-checks layui-bg-gray ta-pl-15">
{empty name='vo.enable_wapsite'}{assign name='vo.enable_wapsite' value='0'}{/empty}
{foreach ['禁用','启用'] as $k=>$n}
{foreach [lang('禁用'),lang('启用')] as $k=>$n}
{if (isset($vo.enable_wapsite) && $vo.enable_wapsite eq $k)}
<input checked type="radio" name="enable_wapsite" value="{$k}" title="{$n}">
{else}
<input type="radio" name="enable_wapsite" value="{$k}" title="{$n}">
{/if}{/foreach}
</div>
<span class="help-block">禁用WAP站点后WAP仅可用于注册绑定。</span>
<span class="help-block">{:lang('禁用WAP站点后WAP仅可用于注册绑定。')}</span>
</div>
<label class="relative block layui-form-item flex-1 ta-ml-15">
<span class="help-label"><b>安卓内链</b>URLScheme</span>
<input class="layui-input" name="scheme_android" placeholder="请输入安卓内链" value='{$vo.scheme_android|default=""}'>
<span class="help-block">系统内部调用该App的专属链接协议。</span>
<span class="help-label"><b>{:lang('安卓内链')}</b>URLScheme</span>
<input class="layui-input" name="scheme_android" placeholder="{:lang('请输入安卓内链')}" value='{$vo.scheme_android|default=""}'>
<span class="help-block">{:lang('系统内部调用该App的专属链接协议。')}</span>
</label>
<label class="relative block layui-form-item flex-1 ta-ml-15">
<span class="help-label"><b>跳转链接</b>Redirect</span>
<input class="layui-input" pattern="url" name="scheme_redirect" placeholder="请输入跳转链接" value='{$vo.scheme_redirect|default=""}'>
<span class="help-block">未启用WAP站点时注册完成跳转的地址。</span>
<span class="help-label"><b>{:lang('跳转链接')}</b>Redirect</span>
<input class="layui-input" pattern="url" name="scheme_redirect" placeholder="{:lang('请输入跳转链接')}" value='{$vo.scheme_redirect|default=""}'>
<span class="help-block">{:lang('未启用WAP站点时注册完成跳转的地址。')}</span>
</label>
</div>
{/notempty}
<div class="layui-form-item">
<span class="help-label"><b>应用图标</b>Icon</span>
<span class="help-label"><b>{:lang('应用图标')}</b>Icon</span>
<div class="relative block">
<input class="layui-input layui-bg-gray" readonly pattern="url" data-tips-image data-tips-hover placeholder="请上传应用图标" value="{$vo.base_icon|default=''}" name="base_icon">
<input class="layui-input layui-bg-gray" readonly pattern="url" data-tips-image data-tips-hover placeholder="{:lang('请上传应用图标')}" value="{$vo.base_icon|default=''}" name="base_icon">
<a class="input-right-icon layui-icon layui-icon-upload-drag" data-file data-type="png,jpg,jpeg,gif" data-field="base_icon"></a>
</div>
<span class="help-block">请上传应用图标,建议使用 200 x 200 尺寸或同比例图片。</span>
<span class="help-block">{:lang('请上传应用图标,建议使用 200 x 200 尺寸或同比例图片。')}</span>
</div>
<label class="layui-form-item relative block">
<span class="help-label"><b>版权信息</b>Copyright</span>
<span class="help-label"><b>{:lang('版权信息')}</b>Copyright</span>
<textarea class="layui-textarea" name="base_copy">{$vo.base_copy|default="\\n"|raw}</textarea>
</label>
@ -91,7 +91,7 @@
<div class="hr-line-dashed"></div>
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" data-close type='button' data-confirm="确定要取消编辑吗?">取消编辑</button>
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" data-close type='button' data-confirm="{:lang('确定要取消编辑吗?')}">{:lang('取消编辑')}</button>
</div>
</form>

View File

@ -2,18 +2,18 @@
<div class="layui-card-body ta-pl-40">
<label class="layui-form-item block relative">
<span class="help-label"><b>方案名称</b>Scheme Name</span>
<input class="layui-input" name="name" placeholder="请输入方案名称" required value="{$vo.name|default=''}">
<span class="help-label"><b>{:lang('方案名称')}</b>Scheme Name</span>
<input class="layui-input" name="name" placeholder="{:lang('请输入方案名称')}" required value="{$vo.name|default=''}">
</label>
<div class="layui-form-item label-required-prev">
<span class="help-label"><b>会员等级</b>User Level</span>
<span class="help-label"><b>{:lang('会员等级')}</b>User Level</span>
<table class="layui-table" lay-skin="line">
<thead>
<tr class="layui-bg-gray">
<th class="text-left">会员等级</th>
<th class="text-right">售价比例 ( 0.00% - 100.00% )</th>
<th class="text-left">{:lang('会员等级')}</th>
<th class="text-right">{:lang('售价比例 ( 0.00% - 100.00% )')}</th>
</tr>
</thead>
<tbody>
@ -34,16 +34,16 @@
</div>
<label class="layui-form-item block relative">
<span class="help-label"><b>方案备注</b>Scheme Remark</span>
<textarea class="layui-textarea" name="remark" placeholder="请输入方案备注">{$vo.remark|default=''}</textarea>
<span class="help-label"><b>{:lang('方案备注')}</b>Scheme Remark</span>
<textarea class="layui-textarea" name="remark" placeholder="{:lang('请输入方案备注')}">{$vo.remark|default=''}</textarea>
</label>
<div class="hr-line-dashed"></div>
{notempty name='vo.id'}<input name='id' type='hidden' value='{$vo.id}'>{/notempty}
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" data-close data-confirm="确定要取消编辑吗?" type='button'>取消编辑</button>
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" data-close data-confirm="{:lang('确定要取消编辑吗?')}" type='button'>{:lang('取消编辑')}</button>
</div>
</div>

View File

@ -2,14 +2,14 @@
{block name="button"}
<!--{if auth("add")}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="DiscountTable" data-modal="{:url('add')}" data-title="添加折扣">添加折扣</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="DiscountTable" data-modal="{:url('add')}" data-title="{:lang('添加折扣')}">{:lang('添加折扣')}</button>
<!--{/if}-->
{/block}
{block name="content"}
<div class="layui-tab layui-tab-card">
<ul class="layui-tab-title">
{foreach ['index'=>'折扣方案','recycle'=>'回 收 站'] as $k=>$v}{if isset($type) and $type eq $k}
{foreach ['index'=>lang('折扣方案'),'recycle'=>lang('回 收 站')] as $k=>$v}{if isset($type) and $type eq $k}
<li data-open="{:url('index')}?type={$k}" class="layui-this">{$v}</li>
{else}
<li data-open="{:url('index')}?type={$k}">{$v}</li>
@ -30,18 +30,18 @@
sort: {field: 'sort desc,id', type: 'desc'},
cols: [[
{field: 'id', title: 'ID', align: "center", width: 80},
{field: 'sort', title: '排序权重', align: 'center', width: 100, sort: true, templet: '#SortInputTpl'},
{field: 'name', title: '方案名称', align: 'left', minWidth: 140},
{field: 'sort', title: '{:lang("排序权重")}', align: 'center', width: 100, sort: true, templet: '#SortInputTpl'},
{field: 'name', title: '{:lang("方案名称")}', align: 'left', minWidth: 140},
{
title: '方案规则', align: 'left', width: '33%', templet: function (d) {
title: '{:lang("方案规则")}', align: 'left', width: '33%', templet: function (d) {
let tags = [];
d.items.forEach((item) => tags.push(laytpl('<span class="layui-badge think-bg-violet">VIP{{d.level}} 折扣 {{d.discount}}%</span>').render(item)));
d.items.forEach((item) => tags.push(laytpl('<span class="layui-badge think-bg-violet">VIP{{d.level}} {:lang("折扣")} {{d.discount}}%</span>').render(item)));
return tags.join('');
}
},
{field: 'status', title: '状 态', align: 'center', width: 110, templet: '#StatusSwitchTpl'},
{field: 'create_time', title: '创建时间', align: 'center', minWidth: 170, sort: true},
{toolbar: '#toolbar', title: '操作面板', align: 'center', minWidth: 80, fixed: 'right'},
{field: 'status', title: '{:lang("状 态")}', align: 'center', width: 110, templet: '#StatusSwitchTpl'},
{field: 'create_time', title: '{:lang("创建时间")}', align: 'center', minWidth: 170, sort: true},
{toolbar: '#toolbar', title: '{:lang("操作面板")}', align: 'center', minWidth: 80, fixed: 'right'},
]]
});
@ -66,19 +66,19 @@
<!-- 数据状态切换模板 -->
<script type="text/html" id="StatusSwitchTpl">
<!--{if auth("state")}-->
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="已激活|已禁用" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="{:lang('已激活')}|{:lang('已禁用')}" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<!--{else}-->
{{-d.status ? '<b class="color-green">已启用</b>' : '<b class="color-red">已禁用</b>'}}
{{-d.status ? '<b class="color-green">' + '{:lang("已启用")}' + '</b>' : '<b class="color-red">' + '{:lang("已禁用")}' + '</b>'}}
<!--{/if}-->
</script>
<!-- 数据操作工具条模板 -->
<script type="text/html" id="toolbar">
<!--{if auth("edit") and isset($type) and $type eq 'index'}-->
<a class="layui-btn layui-btn-primary layui-btn-sm" data-title="编辑方案" data-modal='{:url("edit")}?id={{d.id}}'> </a>
<a class="layui-btn layui-btn-primary layui-btn-sm" data-title="{:lang('编辑方案')}" data-modal='{:url("edit")}?id={{d.id}}'>{:lang('编 辑')}</a>
<!--{/if}-->
<!--{if auth("remove") and isset($type) and $type neq 'index'}-->
<a class="layui-btn layui-btn-danger layui-btn-sm" data-action="{:url('remove')}" data-value="id#{{d.id}}" data-confirm="确定要删除方案吗?"> </a>
<a class="layui-btn layui-btn-danger layui-btn-sm" data-action="{:url('remove')}" data-value="id#{{d.id}}" data-confirm="{:lang('确定要删除方案吗?')}">{:lang('删 除')}</a>
<!--{/if}-->
</script>
{/block}

View File

@ -3,20 +3,20 @@
<div class="layui-card-body ta-pl-40">
<label class="layui-form-item block relative">
<span class="help-label"><b>快递公司名称</b>Name</span>
<input class="layui-input" name="name" placeholder="请输入快递公司名称" required vali-name="快递公司名称" value='{$vo.name|default=""}'>
<span class="color-desc">必填,快递公司名称用于显示快递配送的公司标识,请尽量保持其精准性。</span>
<span class="help-label"><b>{:lang('快递公司名称')}</b>Name</span>
<input class="layui-input" name="name" placeholder="{:lang('请输入快递公司名称')}" required vali-name="{:lang('快递公司名称')}" value='{$vo.name|default=""}'>
<span class="color-desc">{:lang('必填,快递公司名称用于显示快递配送的公司标识,请尽量保持其精准性。')}</span>
</label>
<label class="layui-form-item block relative">
<span class="help-label"><b>接口查询编码</b>Code</span>
<input class="layui-input" name="code" placeholder="请输入快递鸟接口查询编码" required vali-name="接口查询编码" value='{$vo.code|default=""}'>
<span class="color-desc">必填快递公司对应在快递100接口的编码可以从快递100官方接口文档中获取到。</span>
<span class="help-label"><b>{:lang('接口查询编码')}</b>Code</span>
<input class="layui-input" name="code" placeholder="{:lang('请输入快递鸟接口查询编码')}" required vali-name="{:lang('接口查询编码')}" value='{$vo.code|default=""}'>
<span class="color-desc">{:lang('必填快递公司对应在快递100接口的编码可以从快递100官方接口文档中获取到。')}</span>
</label>
<label class="layui-form-item block relative">
<span class="help-label"><b>快递公司描述</b>Remark</span>
<textarea class="layui-textarea" name="remark" placeholder="请输入快递公司描述">{$vo.remark|default=''}</textarea>
<span class="help-label"><b>{:lang('快递公司描述')}</b>Remark</span>
<textarea class="layui-textarea" name="remark" placeholder="{:lang('请输入快递公司描述')}">{$vo.remark|default=''}</textarea>
</label>
</div>
@ -24,7 +24,7 @@
{notempty name='vo.id'}<input name='id' type='hidden' value='{$vo.id}'>{/notempty}
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" data-close data-confirm="确定要取消编辑吗?" type='button'>取消编辑</button>
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" data-close data-confirm="{:lang('确定要取消编辑吗?')}" type='button'>{:lang('取消编辑')}</button>
</div>
</form>

View File

@ -2,30 +2,30 @@
{block name="button"}
<!--{if auth("sync") and $type eq 'index'}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-confirm="确定要同步快递公司数据吗?" data-load='{:url("sync")}'>同步公司</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-confirm="{:lang('确定要同步快递公司数据吗?')}" data-load='{:url("sync")}'>{:lang('同步公司')}</button>
<!--{/if}-->
<!--{if auth("add") and $type eq 'index'}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-modal='{:url("add")}' data-title="添加快递公司">添加公司</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-modal='{:url("add")}' data-title="{:lang('添加快递公司')}">{:lang('添加公司')}</button>
<!--{/if}-->
<!--{if auth("state") and $type eq 'index'}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="DataTable" data-action='{:url("state")}' data-rule="id#{id};status#0">批量禁用</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="DataTable" data-action='{:url("state")}' data-rule="id#{id};status#0">{:lang('批量禁用')}</button>
<!--{/if}-->
<!--{if auth("state") and $type neq 'index'}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="DataTable" data-action='{:url("state")}' data-rule="id#{id};status#1">批量启用</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="DataTable" data-action='{:url("state")}' data-rule="id#{id};status#1">{:lang('批量启用')}</button>
<!--{/if}-->
<!--{if auth("remove") and $type neq 'index'}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="DataTable" data-action='{:url("remove")}' data-rule="id#{id}">批量删除</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="DataTable" data-action='{:url("remove")}' data-rule="id#{id}">{:lang('批量删除')}</button>
<!--{/if}-->
{/block}
{block name="content"}
<div class="layui-tab layui-tab-card think-bg-white">
<ul class="layui-tab-title">
{foreach ['index'=>'快递公司','recycle'=>'回 收 站'] as $k=>$v}
{foreach ['index'=>lang('快递公司'),'recycle'=>lang('回 收 站')] as $k=>$v}
{if isset($type) and $type eq $k}
<li class="layui-this" data-open="{:url('index')}?type={$k}">{$v}</li>
{else}
@ -47,12 +47,12 @@
sort: {field: 'sort desc,id', type: 'desc'},
cols: [[
{checkbox: true, fixed: true},
{field: 'sort', title: '排序权重', width: 100, align: 'center', sort: true, templet: '#SortInputTpl'},
{field: 'name', title: '公司名称', align: "left", minWidth: 100},
{field: 'code', title: '快递编码', align: "left", minWidth: 100},
{field: 'status', title: '使用状态', align: 'center', minWidth: 110, templet: '#StatusSwitchTpl'},
{field: 'id', title: '添加时间', align: 'center', minWidth: 170, sort: true, templet: "<div>{{d.create_time}}</div>"},
{toolbar: '#toolbar', title: '操作面板', align: 'center', fixed: 'right'}
{field: 'sort', title: '{:lang("排序权重")}', width: 100, align: 'center', sort: true, templet: '#SortInputTpl'},
{field: 'name', title: '{:lang("公司名称")}', align: "left", minWidth: 100},
{field: 'code', title: '{:lang("快递编码")}', align: "left", minWidth: 100},
{field: 'status', title: '{:lang("使用状态")}', align: 'center', minWidth: 110, templet: '#StatusSwitchTpl'},
{field: 'id', title: '{:lang("添加时间")}', align: 'center', minWidth: 170, sort: true, templet: "<div>{{d.create_time}}</div>"},
{toolbar: '#toolbar', title: '{:lang("操作面板")}', align: 'center', fixed: 'right'}
]]
});
@ -76,19 +76,19 @@
<!-- 状态切换模板 -->
<script type="text/html" id="StatusSwitchTpl">
<!--{if auth("state")}-->
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="已激活|已禁用" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="{:lang('已激活')}|{:lang('已禁用')}" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<!--{else}-->
{{-d.status ? '<b class="color-red">已激活</b>' : '<b class="color-green">已禁用</b>'}}
{{-d.status ? '<b class="color-red">' + '{:lang("已激活")}' + '</b>' : '<b class="color-green">' + '{:lang("已禁用")}' + '</b>'}}
<!--{/if}-->
</script>
<!-- 操作面板模板 -->
<script type="text/html" id="toolbar">
<!--{if auth("edit") and isset($type) and $type eq 'index'}-->
<a class="layui-btn layui-btn-sm" data-modal="{:url('edit')}?id={{d.id}}" data-title="编辑快递公司"> </a>
<a class="layui-btn layui-btn-sm" data-modal="{:url('edit')}?id={{d.id}}" data-title="{:lang('编辑快递公司')}">{:lang('编 辑')}</a>
<!--{/if}-->
<!--{if auth("remove") and isset($type) and $type neq 'index'}-->
<a class="layui-btn layui-btn-sm layui-btn-danger" data-action="{:url('remove')}" data-value="id#{{d.id}}" data-confirm="确定要删除该用户吗?"> </a>
<a class="layui-btn layui-btn-sm layui-btn-danger" data-action="{:url('remove')}" data-value="id#{{d.id}}" data-confirm="{:lang('确定要删除该用户吗?')}">{:lang('删 除')}</a>
<!--{/if}-->
</script>
{/block}

View File

@ -1,27 +1,27 @@
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-form-pane form-search" method="get" onsubmit="return false">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">快递名称</label>
<label class="layui-form-label">{:lang('快递名称')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="name" placeholder="请输入快递名称" value="{$get.name|default=''}">
<input class="layui-input" name="name" placeholder="{:lang('请输入快递名称')}" value="{$get.name|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">快递编码</label>
<label class="layui-form-label">{:lang('快递编码')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="code" placeholder="请输入快递编码" value="{$get.code|default=''}">
<input class="layui-input" name="code" placeholder="{:lang('请输入快递编码')}" value="{$get.code|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">添加时间</label>
<label class="layui-form-label">{:lang('添加时间')}</label>
<label class="layui-input-inline">
<input class="layui-input" data-date-range name="create_time" placeholder="请选择添加时间" value="{$get.create_time|default=''}">
<input class="layui-input" data-date-range name="create_time" placeholder="{:lang('请选择添加时间')}" value="{$get.create_time|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<input name="type" type="hidden" value="{$type|default='index'}">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
</div>
</form>

View File

@ -5,12 +5,12 @@
<form action="{:sysuri()}" class='layui-form layui-card shadow' data-auto="true" method="post">
<div class="layui-card-body ta-p-40 ta-pb-10">
<label class="layui-form-item block relative">
<span class="help-label"><b>邮费模板名称</b>Name</span>
<input class="layui-input" name="name" placeholder="请输入邮费模板名称" required vali-name="邮费模板名称" value='{$vo.name|default=""}'>
<span class="color-desc"><b>必填</b>邮费模板名称用于区分邮费模板规则,仅在后台选择邮费模板时使用。</span>
<span class="help-label"><b>{:lang('邮费模板名称')}</b>Name</span>
<input class="layui-input" name="name" placeholder="{:lang('请输入邮费模板名称')}" required vali-name="{:lang('邮费模板名称')}" value='{$vo.name|default=""}'>
<span class="color-desc"><b>{:lang('必填')}</b>{:lang('邮费模板名称用于区分邮费模板规则,仅在后台选择邮费模板时使用。')}</span>
</label>
<div class="layui-form-item block relative">
<span class="help-label label-required-prev"><b>指定快递公司</b>Express</span>
<span class="help-label label-required-prev"><b>{:lang('指定快递公司')}</b>Express</span>
<div class="layui-textarea help-checks">
{foreach $companys as $k=>$v}
<label class="think-checkbox" data-width="100px" title="{$v}">
@ -24,28 +24,28 @@
</div>
</div>
<div class="layui-form-item">
<span class="help-label label-required-prev"><b>配送区域计费规则</b>Region</span>
<span class="help-label label-required-prev"><b>{:lang('配送区域计费规则')}</b>Region</span>
<table class="layui-table">
<thead>
<tr>
<th class="nowrap text-left">可配送区域</th>
<th class="nowrap text-center">首件(个)</th>
<th class="nowrap text-center">运费(元)</th>
<th class="nowrap text-center">续件(个)</th>
<th class="nowrap text-center">续费(元)</th>
<th class="nowrap text-left">{:lang('可配送区域')}</th>
<th class="nowrap text-center">{:lang('首件(个)')}</th>
<th class="nowrap text-center">{:lang('运费(元)')}</th>
<th class="nowrap text-center">{:lang('续件(个)')}</th>
<th class="nowrap text-center">{:lang('续费(元)')}</th>
</tr>
</thead>
<tbody>
<!--已选择的区域邮费规则-->
<tr ng-if="item.city.length > 0" ng-repeat="item in rules">
<td>
<b class="color-green">自定区域:</b>
<b class="color-green">{:lang('自定区域:')}</b>
<div class="ta-mr-5 inline-block" ng-if="ShowProvinceStatus(province)" ng-repeat="province in item.city">
<b class="font-w7" ng-bind="province.name"></b>
<span class="color-desc">{{ShowProvinceCityName(province)}}</span>
</div>
<a class="ta-ml-5 inline-block nowrap" ng-click="EditRuleItem(item)">编辑</a>
<a class="ta-ml-5 inline-block nowrap" ng-click="RemoveRuleItem(item)">删除</a>
<a class="ta-ml-5 inline-block nowrap" ng-click="EditRuleItem(item)">{:lang('编辑')}</a>
<a class="ta-ml-5 inline-block nowrap" ng-click="RemoveRuleItem(item)">{:lang('删除')}</a>
</td>
<td class="ta-p-0 text-center">
<input class="layui-input text-center ta-pl-0 border-0" ng-blur="convertNumber(item.rule,'firstNumber',0)" ng-model="item.rule.firstNumber">
@ -61,12 +61,12 @@
</td>
</tr>
<tr ng-if="defs.city.length > 0">
<td colspan="5"><a class="font-w7" ng-click="AddRuleItem()">添加可配送区域和运费</a></td>
<td colspan="5"><a class="font-w7" ng-click="AddRuleItem()">{:lang('添加可配送区域和运费')}</a></td>
</tr>
<!-- 未选择的区域邮费规则 -->
<tr ng-if="defs.city.length > 0">
<td>
<b class="color-green">默认区域:</b>
<b class="color-green">{:lang('默认区域:')}</b>
<div class="ta-mr-5 inline-block" ng-repeat="province in defs.city">
<b class="font-w7" ng-bind="province.name"></b>
<span class="color-desc">{{ShowProvinceCityName(province)}}</span>
@ -99,7 +99,7 @@
{notempty name='vo.code'}<input name="code" type="hidden" value="{$vo.code}">{/notempty}
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
</div>
</div>
</form>
@ -110,8 +110,8 @@
<div class="layui-col-xs8">
<div class="layui-textarea" style="height:360px;overflow:auto">
<div>
<span class="pointer notselect ta-mr-10" ng-click="CheckAllProvince(true)">全选</span>
<span class="pointer notselect ta-mr-10" ng-click="CheckAllProvince(false)">取消</span>
<span class="pointer notselect ta-mr-10" ng-click="CheckAllProvince(true)">{:lang('全选')}</span>
<span class="pointer notselect ta-mr-10" ng-click="CheckAllProvince(false)">{:lang('取消')}</span>
</div>
<hr class="hr-line-dashed ta-mt-5 ta-mb-5">
<div class="layui-row layui-col-space5">
@ -128,8 +128,8 @@
<div class="layui-col-xs4">
<div class="layui-textarea" style="height:360px;overflow:auto">
<div>
<span class="pointer notselect ta-mr-10" ng-click="CheckAllCity(true)">全选</span>
<span class="pointer notselect ta-mr-10" ng-click="CheckAllCity(false)">取消</span>
<span class="pointer notselect ta-mr-10" ng-click="CheckAllCity(true)">{:lang('全选')}</span>
<span class="pointer notselect ta-mr-10" ng-click="CheckAllCity(false)">{:lang('取消')}</span>
<b class="pull-right color-blue" ng-bind="city.name"></b>
</div>
<hr class="hr-line-dashed ta-mt-5 ta-mb-5">
@ -141,7 +141,7 @@
</div>
</div>
<div class="layui-form-item text-center">
<button class="layui-btn" ng-click="SetRuleItem()">确定选择</button>
<button class="layui-btn" ng-click="SetRuleItem()">{:lang('确定选择')}</button>
</div>
</div>
</div>
@ -280,7 +280,7 @@
/*! 显示区域选择器 */
$rootScope.showDialog = function () {
layui.layer.open({
type: 1, shade: false, area: '800px', title: '区域选择器',
type: 1, shade: false, area: '800px', title: '{:lang("区域选择器")}',
content: $('#RegionDialog').removeClass('layui-hide'), end: function () {
$('#RegionDialog').addClass('layui-hide'), $rootScope.SetRuleItem();
}

View File

@ -2,18 +2,18 @@
{block name="button"}
<!--{if auth("add")}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-open='{:url("add")}'>添加模板</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-open='{:url("add")}'>{:lang('添加模板')}</button>
<!--{/if}-->
<!--{if auth("region")}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-open='{:url("region")}'>配送区域</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-open='{:url("region")}'>{:lang('配送区域')}</button>
<!--{/if}-->
{/block}
{block name="content"}
<div class="layui-tab layui-tab-card think-bg-white">
<ul class="layui-tab-title">
{foreach ['index'=>'费用模板','recycle'=>'回 收 站'] as $k=>$v}
{foreach ['index'=>lang('费用模板'),'recycle'=>lang('回 收 站')] as $k=>$v}
{if isset($type) and $type eq $k}
<li class="layui-this" data-open="{:url('index')}?type={$k}">{$v}</li>
{else}
@ -36,11 +36,11 @@
sort: {field: 'sort desc,id', type: 'desc'},
cols: [[
{checkbox: true, fixed: true},
{field: 'sort', title: '排序权重', width: 100, align: 'center', sort: true, templet: '#SortInputTpl'},
{field: 'code', title: '模板编号', align: "center"},
{field: 'name', title: '模板名称', align: "center"},
{field: 'sort', title: '{:lang("排序权重")}', width: 100, align: 'center', sort: true, templet: '#SortInputTpl'},
{field: 'code', title: '{:lang("模板编号")}', align: "center"},
{field: 'name', title: '{:lang("模板名称")}', align: "center"},
{
field: 'company', title: '快递公司', align: "center", templet: function (d) {
field: 'company', title: '{:lang("快递公司")}', align: "center", templet: function (d) {
let tpl = '';
layui.each(d.company || {}, function (k, v) {
tpl += laytpl("<span class='layui-badge think-bg-violet'>{{d.v}}</span>").render({v: v});
@ -48,9 +48,9 @@
return tpl || '-';
}
},
{field: 'status', title: '使用状态', align: 'center', minWidth: 110, templet: '#StatusSwitchTpl'},
{field: 'create_time', title: '添加时间', align: 'center', minWidth: 170},
{toolbar: '#toolbar', title: '操作面板', align: 'center', minWidth: 80, fixed: 'right'}
{field: 'status', title: '{:lang("使用状态")}', align: 'center', minWidth: 110, templet: '#StatusSwitchTpl'},
{field: 'create_time', title: '{:lang("添加时间")}', align: 'center', minWidth: 170},
{toolbar: '#toolbar', title: '{:lang("操作面板")}', align: 'center', minWidth: 80, fixed: 'right'}
]]
});
@ -74,19 +74,19 @@
<!-- 状态切换模板 -->
<script type="text/html" id="StatusSwitchTpl">
<!--{if auth("state")}-->
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="已激活|已禁用" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="{:lang('已激活')}|{:lang('已禁用')}" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<!--{else}-->
{{-d.status ? '<b class="color-red">已激活</b>' : '<b class="color-green">已禁用</b>'}}
{{-d.status ? '<b class="color-red">' + '{:lang("已激活")}' + '</b>' : '<b class="color-green">' + '{:lang("已禁用")}' + '</b>'}}
<!--{/if}-->
</script>
<!-- 操作面板模板 -->
<script type="text/html" id="toolbar">
<!--{if auth("edit") and isset($type) and $type eq 'index'}-->
<a class="layui-btn layui-btn-sm" data-open="{:url('edit')}?id={{d.id}}"> </a>
<a class="layui-btn layui-btn-sm" data-open="{:url('edit')}?id={{d.id}}">{:lang('编 辑')}</a>
<!--{/if}-->
<!--{if auth("remove") and isset($type) and $type neq 'index'}-->
<a class="layui-btn layui-btn-sm layui-btn-danger" data-action="{:url('remove')}" data-value="id#{{d.id}}" data-confirm="确定要删除该用户吗?"> </a>
<a class="layui-btn layui-btn-sm layui-btn-danger" data-action="{:url('remove')}" data-value="id#{{d.id}}" data-confirm="{:lang('确定要删除该用户吗?')}">{:lang('删 除')}</a>
<!--{/if}-->
</script>
{/block}

View File

@ -1,26 +1,26 @@
<form action="{:url('index')}" autocomplete="off" class="layui-form layui-form-pane form-search" method="get" onsubmit="return false">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">模板编号</label>
<label class="layui-form-label">{:lang('模板编号')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="code" placeholder="请输入模板编号" value="{$get.code|default=''}">
<input class="layui-input" name="code" placeholder="{:lang('请输入模板编号')}" value="{$get.code|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">模板名称</label>
<label class="layui-form-label">{:lang('模板名称')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="name" placeholder="请输入模板名称" value="{$get.name|default=''}">
<input class="layui-input" name="name" placeholder="{:lang('请输入模板名称')}" value="{$get.name|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">添加时间</label>
<label class="layui-form-label">{:lang('添加时间')}</label>
<label class="layui-input-inline">
<input class="layui-input" data-date-range name="create_time" placeholder="请选择添加时间" value="{$get.create_time|default=''}">
<input class="layui-input" data-date-range name="create_time" placeholder="{:lang('请选择添加时间')}" value="{$get.create_time|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
</div>
</form>

View File

@ -2,17 +2,17 @@
{block name="content"}
<div class="think-box-notify">
<strong>颜色说明:</strong>
<b class="layui-badge layui-bg-green">绿色</b>表示全部选中,
<b class="layui-badge layui-bg-blue">蓝色</b>表示部分选中,
<b class="layui-badge layui-bg-orange">橙色</b>表示未选中。
<strong>{:lang('颜色说明:')}</strong>
<b class="layui-badge layui-bg-green">{:lang('绿色')}</b>{:lang('表示全部选中,')}
<b class="layui-badge layui-bg-blue">{:lang('蓝色')}</b>{:lang('表示部分选中,')}
<b class="layui-badge layui-bg-orange">{:lang('橙色')}</b>{:lang('表示未选中。')}
</div>
<div class="think-box-shadow" id="TruckForm">
<div class="layui-card border-line">
<div class="layui-card-header layui-bg-gray border-bottom-line">
<b class="color-green">全国</b><span class="font-s12 color-desc ta-ml-10">配送省份</span>
<a class="pull-right notselect" ng-click="SetAllChecked(items)">全选</a>
<b class="color-green">{:lang('全国')}</b><span class="font-s12 color-desc ta-ml-10">{:lang('配送省份')}</span>
<a class="pull-right notselect" ng-click="SetAllChecked(items)">{:lang('全选')}</a>
</div>
<div class="layui-card-body">
<div class="layui-btn layui-btn-radius ta-ml-0 ta-mr-5 ta-mb-5" ng-class="x.style" ng-click="SetActiveProv(x)" ng-repeat="x in items">
@ -23,8 +23,8 @@
<div class="layui-card border-line">
<div class="layui-card-header layui-bg-gray border-bottom-line">
<b class="color-green" ng-bind="prov.name"></b><span class="font-s12 color-desc ta-ml-10">配送城市</span>
<a class="pull-right notselect" ng-click="SetAllChecked(prov.subs)">全选</a>
<b class="color-green" ng-bind="prov.name"></b><span class="font-s12 color-desc ta-ml-10">{:lang('配送城市')}</span>
<a class="pull-right notselect" ng-click="SetAllChecked(prov.subs)">{:lang('全选')}</a>
</div>
<div class="layui-card-body">
<div class="layui-btn layui-btn-radius ta-ml-0 ta-mr-5 ta-mb-5" ng-class="x.style" ng-click="SetActiveCity(x)" ng-repeat="x in prov.subs">
@ -35,8 +35,8 @@
<div class="layui-card border-line">
<div class="layui-card-header layui-bg-gray border-bottom-line">
<b class="color-green" ng-bind="city.name"></b><span class="font-s12 color-desc ta-ml-10">配送区域</span>
<a class="pull-right notselect" ng-click="SetAllChecked(city.subs)">全选</a>
<b class="color-green" ng-bind="city.name"></b><span class="font-s12 color-desc ta-ml-10">{:lang('配送区域')}</span>
<a class="pull-right notselect" ng-click="SetAllChecked(city.subs)">{:lang('全选')}</a>
</div>
<div class="layui-card-body">
<div class="layui-btn layui-btn-radius ta-ml-0 ta-mr-5 ta-mb-5" ng-class="x.style" ng-repeat="x in city.subs">
@ -47,8 +47,8 @@
<div class="hr-line-dashed ta-mt-40"></div>
<div class="layui-form-item text-center">
<button class="layui-btn layui-btn-danger" type="button" data-target-backup>取消修改</button>
<button class="layui-btn" ng-click="Confirm()">确定修改</button>
<button class="layui-btn layui-btn-danger" type="button" data-target-backup>{:lang('取消修改')}</button>
<button class="layui-btn" ng-click="Confirm()">{:lang('确定修改')}</button>
</div>
</div>

View File

@ -3,36 +3,36 @@
<div class="layui-form-item flex">
<div class="flex-1">
<span class="help-label label-required-prev"><b>等级序号</b>Level Serial</span>
<span class="help-label label-required-prev"><b>{:lang('等级序号')}</b>Level Serial</span>
<select class="layui-select" name="number" lay-filter="number">
{for start="0" end="$max" name="i"}{if isset($vo.number) and $vo.number eq $i}
<option selected value="{$i}">当前 VIP {$vo.number} 等级</option>
<option selected value="{$i}">{:lang('当前')} VIP {$vo.number} {:lang('等级')}</option>
{else}
<option value="{$i}">设置 VIP {$i} 等级</option>
<option value="{$i}">{:lang('设置')} VIP {$i} {:lang('等级')}</option>
{/if}{/for}
</select>
</div>
<label class="flex-3 ta-ml-15 relative">
<span class="help-label label-required-prev"><b>等级名称</b>Level Name</span>
<input class="layui-input" name="name" placeholder="请输入等级名称" required value="{$vo.name|default=''}">
<span class="help-label label-required-prev"><b>{:lang('等级名称')}</b>Level Name</span>
<input class="layui-input" name="name" placeholder="{:lang('请输入等级名称')}" required value="{$vo.name|default=''}">
</label>
</div>
<div class="layui-form-item">
<span class="help-label"><b>等级图标</b>( 建议上传尺寸为 400x400 的图片或同比例图片 )</span>
<span class="help-label"><b>{:lang('等级图标')}</b>( {:lang('建议上传尺寸为 400x400 的图片或同比例图片')} )</span>
<div class="relative block">
<label>
<input class="layui-input layui-bg-gray" readonly placeholder="请上传等级封面" data-tips-hover data-tips-image name="cover" value='{$vo.cover|default=""}'>
<input class="layui-input layui-bg-gray" readonly placeholder="{:lang('请上传等级封面')}" data-tips-hover data-tips-image name="cover" value='{$vo.cover|default=""}'>
</label>
<a class="layui-icon layui-icon-upload input-right-icon" data-file data-field="cover" data-type="gif,png,jpg"></a>
</div>
</div>
<div class="layui-form-item">
<span class="help-label"><b>卡片背景</b>( 建议上传尺寸为 650x330 的图片或同比例图片)</span>
<span class="help-label"><b>{:lang('卡片背景')}</b>( {:lang('建议上传尺寸为 650x330 的图片或同比例图片')} )</span>
<div class="relative block">
<label>
<input class="layui-input layui-bg-gray" readonly placeholder="请上传卡片背景" data-tips-hover data-tips-image name="cardbg" value='{$vo.cardbg|default=""}'>
<input class="layui-input layui-bg-gray" readonly placeholder="{:lang('请上传卡片背景')}" data-tips-hover data-tips-image name="cardbg" value='{$vo.cardbg|default=""}'>
</label>
<a class="layui-icon layui-icon-upload input-right-icon" data-file data-field="cardbg" data-type="gif,png,jpg"></a>
</div>
@ -40,10 +40,10 @@
<div class="layui-form-item flex">
<div class="flex-1">
<span class="help-label label-required-prev"><b>团队计数</b>Team Count</span>
<span class="help-label label-required-prev"><b>{:lang('团队计数')}</b>Team Count</span>
{empty name='vo.upgrade_team'}{assign name='vo.upgrade_team' value='1'}{/empty}
<div class="layui-textarea help-checks layui-bg-gray">
{foreach ['不参与团队计数','参与团队计数'] as $k => $v}
{foreach [lang('不参与团队计数'),lang('参与团队计数')] as $k => $v}
<label class="think-radio">
{if isset($vo.upgrade_team) and $vo.upgrade_team eq $k}
<input name="upgrade_team" type="radio" value="{$k}" checked lay-ignore> {$v}
@ -55,10 +55,10 @@
</div>
</div>
<div class="flex-1 ta-ml-15">
<span class="help-label label-required-prev"><b>升级规则</b>Upgrade Type</span>
<span class="help-label label-required-prev"><b>{:lang('升级规则')}</b>Upgrade Type</span>
{empty name='vo.upgrade_type'}{assign name='vo.upgrade_type' value='1'}{/empty}
<div class="layui-textarea help-checks layui-bg-gray">
{foreach ['达成任意条件','达成全部条件'] as $k => $v}
{foreach [lang('达成任意条件'),lang('达成全部条件')] as $k => $v}
<label class="think-radio">
{if isset($vo.upgrade_type) and $vo.upgrade_type eq $k}
<input name="upgrade_type" type="radio" value="{$k}" lay-ignore checked> {$v}
@ -72,38 +72,38 @@
</div>
<div class="layui-form-item">
<span class="help-label label-required-prev"><b>升级条件</b>Upgrade Rules</span>
<span class="help-label label-required-prev"><b>{:lang('升级条件')}</b>Upgrade Rules</span>
<div class="layui-bg-gray layui-textarea help-checks relative flex flex-wrap ta-p-10">
<div class="upgrade-item-group">
{if empty($vo.extra.enter_vip_status)}
<input name="extra.enter_vip_status" type="checkbox" value="1" lay-text="开启 购买入会礼包 升级;">
<input name="extra.enter_vip_status" type="checkbox" value="1" lay-text="{:lang('开启 购买入会礼包 升级;')}">
{else}
<input name="extra.enter_vip_status" type="checkbox" value="1" lay-text="开启 购买入会礼包 升级;" checked>
<input name="extra.enter_vip_status" type="checkbox" value="1" lay-text="{:lang('开启 购买入会礼包 升级;')}" checked>
{/if}
</div>
{foreach ['order_amount'=>'订单总额'] as $k=>$v}
{foreach ['order_amount'=>lang('订单总额')] as $k=>$v}
<div class="upgrade-item-group">
{php}$ks=$k."_status";$kn=$k."_number";{/php}
{if isset($vo['extra'][$ks]) and $vo['extra'][$ks] eq 1}
<input name="extra.{$ks}" type="checkbox" value="1" lay-text="开启 {$v} 升级," checked>
<input name="extra.{$ks}" type="checkbox" value="1" lay-text="{:lang('开启')} {$v} {:lang('升级,')}" checked>
{else}
<input name="extra.{$ks}" type="checkbox" value="1" lay-text="开启 {$v} 升级,">
<input name="extra.{$ks}" type="checkbox" value="1" lay-text="{:lang('开启')} {$v} {:lang('升级,')}">
{/if}
<label class="font-s14">
达到 <input class="inline-block text-center min-input"
{:lang('达到')} <input class="inline-block text-center min-input"
name="extra.{$kn}" value="{$vo['extra'][$kn]|default='0.00'}"
data-blur-number="2" step="0.01" min="0" type="number"> 元;
data-blur-number="2" step="0.01" min="0" type="number"> {:lang('元;')}
</label>
</div>
{/foreach}
<div data-level-zero class="layui-hide notselect">默认等级,无需配置升级规则</div>
<div data-level-zero class="layui-hide notselect">{:lang('默认等级,无需配置升级规则')}</div>
</div>
</div>
<label class="layui-form-item">
<span class="help-label"><b>系统备注</b>System Remark</span>
<textarea class="layui-textarea" name="remark" placeholder="请输入系统备注">{$vo.remark|default=''}</textarea>
<span class="help-label"><b>{:lang('系统备注')}</b>System Remark</span>
<textarea class="layui-textarea" name="remark" placeholder="{:lang('请输入系统备注')}">{$vo.remark|default=''}</textarea>
</label>
</div>
@ -113,8 +113,8 @@
{if isset($vo.number)}<input name='old_number' type='hidden' value='{$vo.number}'>{/if}
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" data-close data-confirm="确定要取消编辑吗?" type='button'>取消编辑</button>
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" data-close data-confirm="{:lang('确定要取消编辑吗?')}" type='button'>{:lang('取消编辑')}</button>
</div>
</form>

View File

@ -2,7 +2,7 @@
{block name="button"}
<!--{if auth("add")}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="LevelTable" data-modal="{:url('add')}">添加等级</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="LevelTable" data-modal="{:url('add')}">{:lang('添加等级')}</button>
<!--{/if}-->
{/block}
@ -21,33 +21,33 @@
even: true, height: 'full',
sort: {field: 'number', type: 'asc'},
cols: [[
{field: 'number', title: '序号', align: "center", minWidth: 70, width: '5%', sort: true},
{field: 'cover', title: '图标', width: 70, align: 'center', templet: '<div>{{-$.layTable.showImage(d.cover)}}</div>'},
{field: 'name', title: '等级名称', align: 'center', minWidth: 80, width: '12%'},
{field: 'number', title: '{:lang("序号")}', align: "center", minWidth: 70, width: '5%', sort: true},
{field: 'cover', title: '{:lang("图标")}', width: 70, align: 'center', templet: '<div>{{-$.layTable.showImage(d.cover)}}</div>'},
{field: 'name', title: '{:lang("等级名称")}', align: 'center', minWidth: 80, width: '12%'},
{
title: '团队计数', align: 'center', minWidth: 80, templet: function (d) {
title: '{:lang("团队计数")}', align: 'center', minWidth: 80, templet: function (d) {
return d.upgrade_team ? '<b class="layui-icon layui-icon-ok-circle color-green"></b>' : '-';
}
},
{
title: '升级规则', align: 'center', minWidth: 80, templet: function (d) {
return d.upgrade_type === 1 ? '<span class="color-green">全部条件</span>' : '<span class="color-blue">任意条件</span>';
title: '{:lang("升级规则")}', align: 'center', minWidth: 80, templet: function (d) {
return d.upgrade_type === 1 ? '<span class="color-green">' + '{:lang("全部条件")}' + '</span>' : '<span class="color-blue">' + '{:lang("任意条件")}' + '</span>';
}
},
{
title: '入会礼包', align: 'center', minWidth: 80, templet: function (d) {
title: '{:lang("入会礼包")}', align: 'center', minWidth: 80, templet: function (d) {
return d.extra.enter_vip_status ? '<b class="layui-icon layui-icon-ok-circle color-green"></b>' : '-';
}
},
{
title: '订单金额', align: 'center', minWidth: 80, templet: function (d) {
title: '{:lang("订单金额")}', align: 'center', minWidth: 80, templet: function (d) {
return d.extra.order_amount_status ? laytpl('<b>{{d.extra.order_amount_number}}</b>').render(d) : '-';
}
},
{field: 'status', title: '等级状态', align: 'center', minWidth: 110, width: '8%', templet: '#StatusSwitchTpl'},
// {field: 'create_time', title: '创建时间', align: 'center', minWidth: 170, width: '15%', sort: true},
{toolbar: '#toolbar', title: '操作面板', align: 'center', minWidth: 150, fixed: 'right'},
{field: 'status', title: '{:lang("等级状态")}', align: 'center', minWidth: 110, width: '8%', templet: '#StatusSwitchTpl'},
// {field: 'create_time', title: '{:lang("创建时间")}', align: 'center', minWidth: 170, width: '15%', sort: true},
{toolbar: '#toolbar', title: '{:lang("操作面板")}', align: 'center', minWidth: 150, fixed: 'right'},
]]
});
@ -72,20 +72,20 @@
<!-- 数据状态切换模板 -->
<script type="text/html" id="StatusSwitchTpl">
<!--{if auth("state")}-->
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="已激活|已禁用" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="{:lang('已激活')}|{:lang('已禁用')}" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<!--{else}-->
{{-d.status ? '<b class="color-green">已启用</b>' : '<b class="color-red">已禁用</b>'}}
{{-d.status ? '<b class="color-green">' + '{:lang("已启用")}' + '</b>' : '<b class="color-red">' + '{:lang("已禁用")}' + '</b>'}}
<!--{/if}-->
</script>
<!-- 数据操作工具条模板 -->
<script type="text/html" id="toolbar">
<!--{if auth('edit')}-->
<a class="layui-btn layui-btn-primary layui-btn-sm" data-table-id="LevelTable" data-title="编辑等级" data-modal='{:url("edit")}?id={{d.id}}'> </a>
<a class="layui-btn layui-btn-primary layui-btn-sm" data-table-id="LevelTable" data-title="{:lang('编辑等级')}" data-modal='{:url("edit")}?id={{d.id}}'>{:lang('编 辑')}</a>
<!--{/if}-->
<!--{if auth("remove")}-->
<a class="layui-btn layui-btn-danger layui-btn-sm" data-confirm="确定要删除等级吗?" data-action="{:url('remove')}" data-value="id#{{d.id}}"> </a>
<a class="layui-btn layui-btn-danger layui-btn-sm" data-confirm="{:lang('确定要删除等级吗?')}" data-action="{:url('remove')}" data-value="id#{{d.id}}">{:lang('删 除')}</a>
<!--{/if}-->
</script>
{/block}

View File

@ -3,18 +3,18 @@
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-form-pane form-search" method="get" onsubmit="return false">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">等级名称</label>
<label class="layui-form-label">{:lang('等级名称')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="name" placeholder="请输入等级名称" value="{$get.name|default=''}">
<input class="layui-input" name="name" placeholder="{:lang('请输入等级名称')}" value="{$get.name|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">等级状态</label>
<label class="layui-form-label">{:lang('等级状态')}</label>
<div class="layui-input-inline">
<select name="status">
<option value="">-- 全部 --</option>
{foreach ['已禁用', '已激活'] as $k=>$v}
<option value="">{:lang('-- 全部 --')}</option>
{foreach [lang('已禁用'), lang('已激活')] as $k=>$v}
{if input('status') eq $k.''}
<option selected value="{$k}">{$v}</option>
{else}
@ -25,14 +25,14 @@
</div>
<div class="layui-form-item layui-hide">
<label class="layui-form-label">创建时间</label>
<label class="layui-form-label">{:lang('创建时间')}</label>
<div class="layui-input-inline">
<input class="layui-input" data-date-range name="create_time" placeholder="请选择创建时间" value="{$get.create_time|default=''}">
<input class="layui-input" data-date-range name="create_time" placeholder="{:lang('请选择创建时间')}" value="{$get.create_time|default=''}">
</div>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
</div>
</form>
</fieldset>

View File

@ -1,8 +1,8 @@
{extend name="main"}
{block name="button"}
<button data-target-submit class='layui-btn layui-btn-sm'>保存数据</button>
<button data-target-backup class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="确认要取消编辑吗?">取消编辑</button>
<button data-target-submit class='layui-btn layui-btn-sm'>{:lang('保存数据')}</button>
<button data-target-backup class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="{:lang('确认要取消编辑吗?')}">{:lang('取消编辑')}</button>
{/block}
{block name='content'}
@ -10,14 +10,14 @@
<div class="layui-card-body">
<label class="layui-form-item relative block">
<span class="help-label"><b>通知标题</b>Notify Title</span>
<input class="layui-input" name="name" placeholder="请输入通知标题" required value='{$vo.name|default=""}'>
<span class="help-label"><b>{:lang('通知标题')}</b>Notify Title</span>
<input class="layui-input" name="name" placeholder="{:lang('请输入通知标题')}" required value='{$vo.name|default=""}'>
</label>
<div class="layui-form-item label-required-prev">
<span class="help-label"><b>通知内容</b>Notify Content</span>
<span class="help-label"><b>{:lang('通知内容')}</b>Notify Content</span>
<label class="relative block">
<textarea class="layui-hide" name="content" placeholder="请输入通知内容">{$vo.content|default=''}</textarea>
<textarea class="layui-hide" name="content" placeholder="{:lang('请输入通知内容')}">{$vo.content|default=''}</textarea>
</label>
</div>
@ -25,8 +25,8 @@
{notempty name='vo.id'}<input name='id' type='hidden' value='{$vo.id}'>{/notempty}
<div class="layui-form-item text-center">
<button class="layui-btn" type="submit">保存数据</button>
<button class="layui-btn layui-btn-danger" data-confirm="确定要取消编辑吗?" type='button' data-target-backup>取消编辑</button>
<button class="layui-btn" type="submit">{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" data-confirm="{:lang('确定要取消编辑吗?')}" type='button' data-target-backup>{:lang('取消编辑')}</button>
</div>
</div>
</form>

View File

@ -2,11 +2,11 @@
{block name='button'}
<!--{if auth("add")}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="MessageTable" data-open='{:url("add")}'>添加通知</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="MessageTable" data-open='{:url("add")}'>{:lang('添加通知')}</button>
<!--{/if}-->
<!--{if auth("remove")}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="MessageTable" data-action='{:url("remove")}' data-rule="id#{id}" data-confirm="确定要删除这些通知吗?">删除通知</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="MessageTable" data-action='{:url("remove")}' data-rule="id#{id}" data-confirm="{:lang('确定要删除这些通知吗?')}">{:lang('删除通知')}</button>
<!--{/if}-->
{/block}
@ -26,12 +26,12 @@
sort: {field: 'sort desc,id', type: 'desc'},
cols: [[
{checkbox: true, fixed: true},
{field: 'sort', title: '排序权重', align: 'center', width: 100, sort: true, templet: '#SortInputTpl'},
{field: 'name', title: '通知标题', align: 'left', minWidth: 140},
{field: 'num_read', title: '阅读次数', align: 'center', minWidth: 110},
{field: 'status', title: '通知状态', align: 'center', minWidth: 110, templet: '#StatusSwitchTpl'},
{field: 'create_time', title: '创建时间', align: 'center', minWidth: 170, sort: true},
{toolbar: '#toolbar', title: '操作面板', align: 'center', minWidth: 140, fixed: 'right'},
{field: 'sort', title: '{:lang("排序权重")}', align: 'center', width: 100, sort: true, templet: '#SortInputTpl'},
{field: 'name', title: '{:lang("通知标题")}', align: 'left', minWidth: 140},
{field: 'num_read', title: '{:lang("阅读次数")}', align: 'center', minWidth: 110},
{field: 'status', title: '{:lang("通知状态")}', align: 'center', minWidth: 110, templet: '#StatusSwitchTpl'},
{field: 'create_time', title: '{:lang("创建时间")}', align: 'center', minWidth: 170, sort: true},
{toolbar: '#toolbar', title: '{:lang("操作面板")}', align: 'center', minWidth: 140, fixed: 'right'},
]]
});
@ -56,20 +56,20 @@
<!-- 数据状态切换模板 -->
<script type="text/html" id="StatusSwitchTpl">
<!--{if auth("state")}-->
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="已激活|已禁用" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="{:lang('已激活')}|{:lang('已禁用')}" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<!--{else}-->
{{-d.status ? '<b class="color-green">已启用</b>' : '<b class="color-red">已禁用</b>'}}
{{-d.status ? '<b class="color-green">' + '{:lang("已启用")}' + '</b>' : '<b class="color-red">' + '{:lang("已禁用")}' + '</b>'}}
<!--{/if}-->
</script>
<!-- 数据操作工具条模板 -->
<script type="text/html" id="toolbar">
<!--{if auth('edit')}-->
<a class="layui-btn layui-btn-primary layui-btn-sm" data-open='{:url("edit")}?id={{d.id}}'> </a>
<a class="layui-btn layui-btn-primary layui-btn-sm" data-open='{:url("edit")}?id={{d.id}}'>{:lang('编 辑')}</a>
<!--{/if}-->
<!--{if auth("remove")}-->
<a class="layui-btn layui-btn-danger layui-btn-sm" data-confirm="确定要删除问题吗?" data-action="{:url('remove')}" data-value="id#{{d.id}}"> </a>
<a class="layui-btn layui-btn-danger layui-btn-sm" data-confirm="{:lang('确定要删除问题吗?')}" data-action="{:url('remove')}" data-value="id#{{d.id}}">{:lang('删 除')}</a>
<!--{/if}-->
</script>
{/block}

View File

@ -1,20 +1,20 @@
<fieldset>
<legend>条件搜索</legend>
<legend>{:lang('条件搜索')}</legend>
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-form-pane form-search" method="get" onsubmit="return false">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">通知标题</label>
<label class="layui-form-label">{:lang('通知标题')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="name" placeholder="请输入通知标题" value="{$get.name|default=''}">
<input class="layui-input" name="name" placeholder="{:lang('请输入通知标题')}" value="{$get.name|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">使用状态</label>
<label class="layui-form-label">{:lang('使用状态')}</label>
<div class="layui-input-inline">
<select class="layui-select" name="status">
<option value=''>-- 全部 --</option>
{foreach ['显示禁止的通知', '显示正常的通知'] as $k=>$v}
<option value=''>{:lang('-- 全部 --')}</option>
{foreach [lang('显示禁止的通知'), lang('显示正常的通知')] as $k=>$v}
{if isset($get.status) and $get.status eq $k.''}
<option selected value="{$k}">{$v}</option>
{else}
@ -25,14 +25,14 @@
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">创建时间</label>
<label class="layui-form-label">{:lang('创建时间')}</label>
<label class="layui-input-inline">
<input class="layui-input" data-date-range name="create_time" placeholder="请选择创建时间" value="{$get.create_time|default=''}">
<input class="layui-input" data-date-range name="create_time" placeholder="{:lang('请选择创建时间')}" value="{$get.create_time|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
</div>
</form>
</fieldset>

View File

@ -1,8 +1,8 @@
{extend name="main"}
{block name="button"}
<button data-target-submit class='layui-btn layui-btn-sm'>保存数据</button>
<button data-target-backup class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="确认要取消编辑吗?">取消编辑</button>
<button data-target-submit class='layui-btn layui-btn-sm'>{:lang('保存数据')}</button>
<button data-target-backup class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="{:lang('确认要取消编辑吗?')}">{:lang('取消编辑')}</button>
{/block}
{block name="content"}
@ -20,20 +20,20 @@
</div>
<div class="flex-1 ta-pl-30">
<a class="absolute" style="right:20px;top:20px" @click="show()"> </a>
<a class="absolute" style="right:20px;top:20px" @click="show()">{:lang('预 览')}</a>
<label class="layui-form-item block relative">
<span class="help-label label-required-prev"><b>推广海报编号</b><code>Code</code></span>
<input class="layui-input think-bg-gray" name="code" readonly required placeholder="请输入推广海报编号" value='{$vo.code|default=""}'>
<span class="help-label label-required-prev"><b>{:lang('推广海报编号')}</b><code>Code</code></span>
<input class="layui-input think-bg-gray" name="code" readonly required placeholder="{:lang('请输入推广海报编号')}" value='{$vo.code|default=""}'>
</label>
<label class="layui-form-item block relative">
<span class="help-label label-required-prev"><b>推广海报标题</b><code>Title</code></span>
<input class="layui-input" name="name" required placeholder="请输入推广海报标题" value='{$vo.name|default=""}'>
<span class="help-label label-required-prev"><b>{:lang('推广海报标题')}</b><code>Title</code></span>
<input class="layui-input" name="name" required placeholder="{:lang('请输入推广海报标题')}" value='{$vo.name|default=""}'>
</label>
<div class="layui-form-item block relative">
<span class="help-label label-required-prev"><b>授权终端类型</b><code>Device</code></span>
<span class="help-label label-required-prev"><b>{:lang('授权终端类型')}</b><code>Device</code></span>
<div class="layui-textarea help-checks">
{empty name='vo.devices'}{php}$vo['devices']=[];{/php}{/empty}
{foreach $devices as $k=>$l}
@ -49,7 +49,7 @@
</div>
<div class="layui-form-item block relative">
<span class="help-label label-required-prev"><b>授权会员等级</b><code>Level</code></span>
<span class="help-label label-required-prev"><b>{:lang('授权会员等级')}</b><code>Level</code></span>
<div class="layui-textarea help-checks">
{empty name='vo.levels'}{php}$vo['levels']=[];{/php}{/empty}
{foreach $levels as $l}
@ -65,7 +65,7 @@
</div>
<div class="layui-form-item">
<span class="help-label label-required-prev"><b>推广海报底图</b>( 推荐尺寸 1008 x 1426 或相应比例 )</span>
<span class="help-label label-required-prev"><b>{:lang('推广海报底图')}</b>( {:lang('推荐尺寸 1008 x 1426 或相应比例')} )</span>
<label class="block relative">
<input class="layui-input think-bg-gray" data-tips-image data-tips-hover readonly v-model="image" name="image">
<a class="layui-icon layui-icon-upload input-right-icon" data-file data-field="image" data-type="png,jpg,jpeg"></a>
@ -74,33 +74,33 @@
<div class="layui-row layui-col-space15">
<div class="layui-col-md4 layui-col-sm6 layui-col-xs6" v-for="(x,k) in items">
<span class="help-label label-required-prev"><b>邀请人{{x.name}}</b></span>
<span class="help-label label-required-prev"><b>{:lang('邀请人')}{{x.name}}</b></span>
<div class="layui-textarea">
<div class="layui-input-group">
<div class="layui-input-prefix nowrap">是否显示</div>
<label class="think-radio"><input type="radio" v-model="x.state" value="1" lay-ignore> </label>
<label class="think-radio"><input type="radio" v-model="x.state" value="0" lay-ignore> </label>
<div class="layui-input-prefix nowrap">{:lang('是否显示')}</div>
<label class="think-radio"><input type="radio" v-model="x.state" value="1" lay-ignore> {:lang('')}</label>
<label class="think-radio"><input type="radio" v-model="x.state" value="0" lay-ignore> {:lang('')}</label>
</div>
<div v-if="x.type==='ximg'" class="layui-input-group ta-mt-10">
<div class="layui-input-prefix nowrap">图片尺寸</div>
<div class="layui-input-prefix nowrap">{:lang('图片尺寸')}</div>
<label><input type="number" v-model="x.size" min="12" max="200" value="12" class="layui-input ta-pr-0"></label>
<div class="layui-input-suffix">px</div>
</div>
<div v-if="x.type=='text'" class="layui-input-group ta-mt-10">
<div class="layui-input-prefix nowrap">文字大小</div>
<div class="layui-input-prefix nowrap">{:lang('文字大小')}</div>
<label><input type="number" v-model="x.size" min="12" max="99" value="12" class="layui-input ta-pr-0"></label>
<div class="layui-input-suffix"><span :data-color-picker="k" class="ta-m-0"></span></div>
</div>
<div v-if="x.rule=='item.value'" class="layui-input-group ta-mt-10">
<div class="layui-input-prefix nowrap">文字内容</div>
<div class="layui-input-prefix nowrap">{:lang('文字内容')}</div>
<label class="block">
<input class="layui-input" placeholder="请输入文字内容" v-model="x.value">
<input class="layui-input" :placeholder="'{:lang('请输入文字内容')}'" v-model="x.value">
</label>
</div>
<div v-if="x.rule=='user.spreat'" class="layui-input-group ta-mt-10">
<div class="layui-input-prefix nowrap">入口链接</div>
<div class="layui-input-prefix nowrap">{:lang('入口链接')}</div>
<label class="block">
<input class="layui-input" placeholder="请输入入口链接" v-model="x.value">
<input class="layui-input" :placeholder="'{:lang('请输入入口链接')}'" v-model="x.value">
</label>
</div>
</div>
@ -118,8 +118,8 @@
{notempty name='vo.id'}<input name="id" type="hidden" value="{$vo.id}">{/notempty}
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="确认要取消编辑吗?" data-target-backup>取消编辑</button>
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="{:lang('确认要取消编辑吗?')}" data-target-backup>{:lang('取消编辑')}</button>
</div>
</div>
</form>
@ -132,11 +132,11 @@
id: parseInt("{$vo.id|default=0}"),
image: '{$vo.image|default="https://fakeimg.pl/10x10/16baaa/16baaa"}',
imageBox: {w: 504, h: 713}, items: [
{type: 'ximg', name: '用户头像', rule: 'user.headimg', value: '', size: 100, state: 1, point: {x: 30, y: 80}, color: 'rgba(51,51,51,1)'},
{type: 'text', name: '用户昵称', rule: 'user.nickname', value: '用户昵称', size: 14, state: 1, point: {x: 55, y: 82}, color: 'rgba(51,51,51,1)'},
{type: 'text', name: '等级身份', rule: 'user.rolename', value: '推广专员', size: 14, state: 1, point: {x: 55, y: 88}, color: 'rgba(51,51,51,1)'},
{type: 'ximg', name: '邀请二维码', rule: 'user.spreat', value: '/pages/home/index', size: 100, state: 1, point: {x: 70, y: 80}, color: 'rgba(51,51,51,1)'},
{type: 'text', name: '推广短语', rule: 'item.value', value: '推广短语', size: 14, state: 1, point: {x: 30, y: 75}, color: 'rgba(51,51,51,1)'},
{type: 'ximg', name: '{:lang("用户头像")}', rule: 'user.headimg', value: '', size: 100, state: 1, point: {x: 30, y: 80}, color: 'rgba(51,51,51,1)'},
{type: 'text', name: '{:lang("用户昵称")}', rule: 'user.nickname', value: '{:lang("用户昵称")}', size: 14, state: 1, point: {x: 55, y: 82}, color: 'rgba(51,51,51,1)'},
{type: 'text', name: '{:lang("等级身份")}', rule: 'user.rolename', value: '{:lang("推广专员")}', size: 14, state: 1, point: {x: 55, y: 88}, color: 'rgba(51,51,51,1)'},
{type: 'ximg', name: '{:lang("邀请二维码")}', rule: 'user.spreat', value: '/pages/home/index', size: 100, state: 1, point: {x: 70, y: 80}, color: 'rgba(51,51,51,1)'},
{type: 'text', name: '{:lang("推广短语")}', rule: 'item.value', value: '{:lang("推广短语")}', size: 14, state: 1, point: {x: 30, y: 75}, color: 'rgba(51,51,51,1)'},
]
}, methods: {
point(data) {

View File

@ -3,17 +3,17 @@
{block name="button"}
{if isset($type) and $type eq 'index'}
<!--{if auth("add")}-->
<button data-open='{:url("add")}' class='layui-btn layui-btn-sm layui-btn-primary'>添加海报</button>
<button data-open='{:url("add")}' class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('添加海报')}</button>
<!--{/if}-->
<!--{if auth("state")}-->
<a data-confirm="确定要批量禁用海报吗?" data-table-id="PosterTable" data-action="{:url('state')}" data-rule="id#{id};status#0" class='layui-btn layui-btn-sm layui-btn-primary'>批量禁用</a>
<a data-confirm="{:lang('确定要批量禁用海报吗?')}" data-table-id="PosterTable" data-action="{:url('state')}" data-rule="id#{id};status#0" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('批量禁用')}</a>
<!--{/if}-->
{else}
<!--{if auth("state")}-->
<a data-confirm="确定要批量恢复海报吗?" data-table-id="PosterTable" data-action="{:url('state')}" data-rule="id#{id};status#1" class='layui-btn layui-btn-sm layui-btn-primary'>批量恢复</a>
<a data-confirm="{:lang('确定要批量恢复海报吗?')}" data-table-id="PosterTable" data-action="{:url('state')}" data-rule="id#{id};status#1" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('批量恢复')}</a>
<!--{/if}-->
<!--{if auth("remove")}-->
<a data-confirm="确定永久删除海报吗?" data-table-id="PosterTable" data-action='{:url("remove")}' data-rule="id#{id}" class='layui-btn layui-btn-sm layui-btn-primary'>批量删除</a>
<a data-confirm="{:lang('确定永久删除海报吗?')}" data-table-id="PosterTable" data-action='{:url("remove")}' data-rule="id#{id}" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('批量删除')}</a>
<!--{/if}-->
{/if}
{/block}
@ -21,7 +21,7 @@
{block name="content"}
<div class="layui-tab layui-tab-card">
<ul class="layui-tab-title">
{foreach ['index'=>'推广海报','recycle'=>'回 收 站'] as $k=>$v}{if isset($type) and $type eq $k}
{foreach ['index'=>lang('推广海报'),'recycle'=>lang('回 收 站')] as $k=>$v}{if isset($type) and $type eq $k}
<li data-open="{:url('index')}?type={$k}" class="layui-this color-green">{$v}</li>
{else}
<li data-open="{:url('index')}?type={$k}">{$v}</li>
@ -44,11 +44,11 @@
cellExpandedMode: 'tips',
cols: [[
{checkbox: true, fixed: true},
{field: 'sort', title: '排序权重', width: 100, align: 'center', sort: true, templet: '#SortInputTpl'},
{field: 'code', title: '海报编号', align: 'center', width: 160, sort: true},
{field: 'name', title: '海报名称', align: 'center', minWidth: 130},
{field: 'sort', title: '{:lang("排序权重")}', width: 100, align: 'center', sort: true, templet: '#SortInputTpl'},
{field: 'code', title: '{:lang("海报编号")}', align: 'center', width: 160, sort: true},
{field: 'name', title: '{:lang("海报名称")}', align: 'center', minWidth: 130},
{
field: 'levels', title: '授权等级', templet: function (d) {
field: 'levels', title: '{:lang("授权等级")}', templet: function (d) {
let tpls = [];
(d.levels_names || []).map(function (v) {
tpls.push('<span class="layui-badge layui-bg-blue">' + v + '</span>')
@ -57,7 +57,7 @@
}
},
{
field: 'devices', title: '授权终端', templet: function (d) {
field: 'devices', title: '{:lang("授权终端")}', templet: function (d) {
let tpls = [];
(d.devices_names || []).map(function (v) {
tpls.push('<span class="layui-badge layui-bg-blue">' + v + '</span>')
@ -65,9 +65,9 @@
return tpls.join('');
}
},
{field: 'status', title: '账号状态', align: 'center', minWidth: 110, templet: '#StatusSwitchTpl'},
{field: 'create_time', title: '创建时间', align: 'center', minWidth: 170},
{toolbar: '#toolbar', title: '操作面板', align: 'center', minWidth: 210, fixed: 'right'},
{field: 'status', title: '{:lang("账号状态")}', align: 'center', minWidth: 110, templet: '#StatusSwitchTpl'},
{field: 'create_time', title: '{:lang("创建时间")}', align: 'center', minWidth: 170},
{toolbar: '#toolbar', title: '{:lang("操作面板")}', align: 'center', minWidth: 210, fixed: 'right'},
]]
});
@ -91,9 +91,9 @@
<!-- 数据状态切换模板 -->
<script type="text/html" id="StatusSwitchTpl">
<!--{if auth("state")}-->
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="已激活|已禁用" lay-filter="StatusSwitch" {{d.status>0?'checked':''}}>
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="{:lang('已激活')}|{:lang('已禁用')}" lay-filter="StatusSwitch" {{d.status>0?'checked':''}}>
<!--{else}-->
{{d.status ? '<b class="color-green">已启用</b>' : '<b class="color-red">已禁用</b>'}}
{{d.status ? '<b class="color-green">' + '{:lang("已启用")}' + '</b>' : '<b class="color-red">' + '{:lang("已禁用")}' + '</b>'}}
<!--{/if}-->
</script>
@ -101,14 +101,14 @@
<script type="text/html" id="toolbar">
{if isset($type) and $type eq 'index'}
<!-- {if auth("edit")} -->
<a class="layui-btn layui-btn-sm" data-open='{:url("edit")}?id={{d.id}}'> </a>
<a class="layui-btn layui-btn-sm" data-open='{:url("edit")}?id={{d.id}}'>{:lang('编 辑')}</a>
<!--{/if}-->
{else}
<!--{if auth("edit")} -->
<a class="layui-btn layui-btn-sm" data-open='{:url("edit")}?id={{d.id}}'> </a>
<a class="layui-btn layui-btn-sm" data-open='{:url("edit")}?id={{d.id}}'>{:lang('编 辑')}</a>
<!--{/if}-->
<!--{if auth("remove")}-->
<a class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="确定要永久删除此海报吗?" data-action="{:url('remove')}" data-value="id#{{d.id}}"> </a>
<a class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="{:lang('确定要永久删除此海报吗?')}" data-action="{:url('remove')}" data-value="id#{{d.id}}">{:lang('删 除')}</a>
<!--{/if}-->
{/if}
</script>

View File

@ -1,28 +1,28 @@
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-form-pane form-search" method="get" onsubmit="return false">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">海报编码</label>
<label class="layui-form-label">{:lang('海报编码')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="code" placeholder="请输入海报编码" value="{$get.code|default=''}">
<input class="layui-input" name="code" placeholder="{:lang('请输入海报编码')}" value="{$get.code|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">海报名称</label>
<label class="layui-form-label">{:lang('海报名称')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="name" placeholder="请输入海报名称" value="{$get.name|default=''}">
<input class="layui-input" name="name" placeholder="{:lang('请输入海报名称')}" value="{$get.name|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">创建时间</label>
<label class="layui-form-label">{:lang('创建时间')}</label>
<label class="layui-input-inline">
<input class="layui-input" data-date-range name="create_time" placeholder="请选择创建时间" value="{$get.create_time|default=''}">
<input class="layui-input" data-date-range name="create_time" placeholder="{:lang('请选择创建时间')}" value="{$get.create_time|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<input name="type" type="hidden" value="{$type|default='index'}">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
</div>
</form>

View File

@ -5,33 +5,33 @@
<div class="layui-row layui-col-space15">
<div class="layui-col-sm6 layui-col-md3">
<div class="portal-block-item nowrap" style="background:linear-gradient(-125deg,#57bdbf,#2f9de2)">
<div>商品总量</div>
<div>{:lang('商品总量')}</div>
<div>{$goodsTotal|default='0'}</div>
<div>当前商品总数量</div>
<div>{:lang('当前商品总数量')}</div>
</div>
<i class="portal-block-icon layui-icon layui-icon-app"></i>
</div>
<div class="layui-col-sm6 layui-col-md3">
<div class="portal-block-item nowrap" style="background:linear-gradient(-125deg,#ff7d7d,#fb2c95)">
<div>用户总量</div>
<div>{:lang('用户总量')}</div>
<div>{$usersTotal|default='0'}</div>
<div>当前用户总数量</div>
<div>{:lang('当前用户总数量')}</div>
</div>
<i class="portal-block-icon layui-icon layui-icon-user"></i>
</div>
<div class="layui-col-sm6 layui-col-md3">
<div class="portal-block-item nowrap" style="background:linear-gradient(-113deg,#c543d8,#925cc3)">
<div>订单总量</div>
<div>{:lang('订单总量')}</div>
<div>{$orderTotal|default='0'}</div>
<div>已付款订单总数</div>
<div>{:lang('已付款订单总数')}</div>
</div>
<i class="portal-block-icon layui-icon layui-icon-form"></i>
</div>
<div class="layui-col-sm6 layui-col-md3">
<div class="portal-block-item nowrap" style="background:linear-gradient(-141deg,#ecca1b,#f39526)">
<div>交易金额</div>
<div>{:lang('交易金额')}</div>
<div>{$amountTotal|default='0'}</div>
<div>已成交金额总数</div>
<div>{:lang('已成交金额总数')}</div>
</div>
<i class="portal-block-icon layui-icon layui-icon-rmb"></i>
</div>
@ -96,12 +96,12 @@
chart2.resize()
});
chart2.setOption({
title: {text: '会员等级分布统计', left: 'center'},
title: {text: '{:lang("会员等级分布统计")}', left: 'center'},
legend: {orient: 'vertical', left: 'left'},
tooltip: {trigger: 'item', formatter: '{a} <br/>{b} : {c} 人 ( {d}% )'},
tooltip: {trigger: 'item', formatter: '{a} <br/>{b} : {c} {:lang("")} ( {d}% )'},
series: [
{
name: '会员等级',
name: '{:lang("会员等级")}',
type: 'pie',
radius: '60%',
center: ['50%', '55%'],
@ -124,13 +124,13 @@
charts.resize()
});
charts.setOption({
title: [{left: 'center', text: '近十天代理收益统计'}],
title: [{left: 'center', text: '{:lang("近十天代理收益统计")}'}],
tooltip: {trigger: 'axis', show: true, axisPointer: {type: 'cross', label: {}}},
xAxis: [{data: days, gridIndex: 0}],
yAxis: [
{
splitLine: {show: true}, gridIndex: 0, type: 'value', axisLabel: {
formatter: '{value} 元'
formatter: '{value} {:lang("")}'
}
}
],
@ -140,9 +140,9 @@
smooth: true, showBackground: true,
areaStyle: {color: 'rgba(180, 180, 180, 0.5)'},
type: 'line', showSymbol: true, xAxisIndex: 0, yAxisIndex: 0,
label: {normal: {position: 'top', formatter: '{c} 元', show: true}},
label: {normal: {position: 'top', formatter: '{c} {:lang("")}', show: true}},
data: data1.map(function (item) {
return item['返佣金额'];
return item['{:lang("返佣金额")}'];
}),
}
]
@ -154,13 +154,13 @@
charts.resize()
});
charts.setOption({
title: [{left: 'center', text: '近十天用户增涨趋势'}],
title: [{left: 'center', text: '{:lang("近十天用户增涨趋势")}'}],
tooltip: {trigger: 'axis', show: true, axisPointer: {type: 'cross', label: {}}},
xAxis: [{data: days, gridIndex: 0}],
yAxis: [
{
splitLine: {show: true}, gridIndex: 0, type: 'value', axisLabel: {
formatter: '{value} 人'
formatter: '{value} {:lang("")}'
}
}
],
@ -170,9 +170,9 @@
smooth: true, showBackground: true,
areaStyle: {color: 'rgba(180, 180, 180, 0.5)'},
type: 'line', showSymbol: true, xAxisIndex: 0, yAxisIndex: 0,
label: {normal: {position: 'top', formatter: '{c} 人', show: true}},
label: {normal: {position: 'top', formatter: '{c} {:lang("")}', show: true}},
data: data1.map(function (item) {
return item['增加用户'];
return item['{:lang("增加用户")}'];
}),
}
]
@ -184,13 +184,13 @@
charts.resize()
});
charts.setOption({
title: [{left: 'center', text: '近十天订单数量趋势'}],
title: [{left: 'center', text: '{:lang("近十天订单数量趋势")}'}],
tooltip: {trigger: 'axis', show: true, axisPointer: {type: 'cross', label: {}}},
xAxis: [{data: days, gridIndex: 0}],
yAxis: [
{
splitLine: {show: true}, gridIndex: 0, type: 'value', axisLabel: {
formatter: '{value} 单'
formatter: '{value} {:lang("")}'
}
}
],
@ -200,9 +200,9 @@
smooth: true, showBackground: true,
areaStyle: {color: 'rgba(180, 180, 180, 0.5)'},
type: 'line', showSymbol: true, xAxisIndex: 0, yAxisIndex: 0,
label: {normal: {position: 'top', formatter: '{c} 单', show: true}},
label: {normal: {position: 'top', formatter: '{c} {:lang("")}', show: true}},
data: data1.map(function (item) {
return item['订单数量'];
return item['{:lang("订单数量")}'];
}),
}
]
@ -214,21 +214,21 @@
charts.resize()
});
charts.setOption({
title: [{left: 'center', text: '近十天交易金额趋势'}],
title: [{left: 'center', text: '{:lang("近十天交易金额趋势")}'}],
grid: [{left: '10%', right: '3%', top: '25%'}],
tooltip: {
trigger: 'axis',
},
xAxis: [{data: days, gridIndex: 0}],
yAxis: [{type: 'value', splitLine: {show: true}, gridIndex: 0, axisLabel: {formatter: '{value} 元'}}],
yAxis: [{type: 'value', splitLine: {show: true}, gridIndex: 0, axisLabel: {formatter: '{value} {:lang("")}'}}],
series: [
{
smooth: true, showBackground: true,
areaStyle: {color: 'rgba(180, 180, 180, 0.5)'},
type: 'line', showSymbol: true, xAxisIndex: 0, yAxisIndex: 0,
label: {position: 'top', formatter: '{c} 元', show: true},
label: {position: 'top', formatter: '{c} {:lang("")}', show: true},
data: data1.map(function (item) {
return item['订单金额'];
return item['{:lang("订单金额")}'];
}),
}
]
@ -240,28 +240,28 @@
charts.resize()
});
charts.setOption({
title: [{text: '近十天账户余额趋势'}],
legend: {data: ['充值余额', '消费余额']},
title: [{text: '{:lang("近十天账户余额趋势")}'}],
legend: {data: ['{:lang("充值余额")}', '{:lang("消费余额")}']},
tooltip: {trigger: 'axis'},
xAxis: [{data: days, gridIndex: 0}],
yAxis: [{type: 'value', splitLine: {show: true}, gridIndex: 0, axisLabel: {formatter: '{value} 元'}}],
yAxis: [{type: 'value', splitLine: {show: true}, gridIndex: 0, axisLabel: {formatter: '{value} {:lang("")}'}}],
series: [
{
name: '充值余额', type: 'line',
name: '{:lang("充值余额")}', type: 'line',
smooth: true, showBackground: true,
areaStyle: {color: 'rgba(180, 180, 180, 0.5)'},
label: {position: 'top', formatter: '{c} 元', show: true},
label: {position: 'top', formatter: '{c} {:lang("")}', show: true},
data: data1.map(function (item) {
return item['充值余额'];
return item['{:lang("充值余额")}'];
}),
},
{
name: '消费余额', type: 'line',
name: '{:lang("消费余额")}', type: 'line',
smooth: true, showBackground: true,
areaStyle: {color: 'rgba(180, 180, 180, 0.5)'},
label: {formatter: '{c} 元', show: true},
label: {formatter: '{c} {:lang("")}', show: true},
data: data1.map(function (item) {
return item['消费余额'];
return item['{:lang("消费余额")}'];
}),
},
]
@ -274,23 +274,23 @@
});
charts.setOption({
grid: [{left: '10%', right: '3%', top: '25%'}],
title: [{left: 'center', text: '近十天平台余额趋势'}],
title: [{left: 'center', text: '{:lang("近十天平台余额趋势")}'}],
tooltip: {trigger: 'axis'},
xAxis: [{data: days, gridIndex: 0}],
yAxis: [{type: 'value', splitLine: {show: true}, gridIndex: 0, axisLabel: {formatter: '{value} 元'}}],
yAxis: [{type: 'value', splitLine: {show: true}, gridIndex: 0, axisLabel: {formatter: '{value} {:lang("")}'}}],
series: [
{
type: 'line',
smooth: true, showBackground: true,
areaStyle: {color: 'rgba(180, 180, 180, 0.5)'},
label: {formatter: '{c} 元', showSymbol: false, show: true},
label: {formatter: '{c} {:lang("")}', showSymbol: false, show: true},
data: data1.map(function (item) {
return item['剩余余额'];
return item['{:lang("剩余余额")}'];
}),
markLine: {
data: [[
{x: '90%', symbol: 'none', yAxis: 'max'},
{symbol: 'circle', label: {position: 'start', formatter: '最大 {c} 元'}, type: 'max', name: '最高点'}
{symbol: 'circle', label: {position: 'start', formatter: '{:lang("最大")} {c} {:lang("")}'}, type: 'max', name: '{:lang("最高点")}'}
]]
}
}

View File

@ -1,8 +1,8 @@
{extend name="main"}
{block name="button"}
<button data-target-submit class='layui-btn layui-btn-sm'>保存数据</button>
<button data-target-backup class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="确认要取消编辑吗?">取消编辑</button>
<button data-target-submit class='layui-btn layui-btn-sm'>{:lang('保存数据')}</button>
<button data-target-backup class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="{:lang('确认要取消编辑吗?')}">{:lang('取消编辑')}</button>
{/block}
{block name='content'}
@ -11,7 +11,7 @@
{notempty name='vo.images'}
<div class="layui-form-item">
<span class="help-label"><b>问题图片</b>Feedback Image</span>
<span class="help-label"><b>{:lang('问题图片')}</b>Feedback Image</span>
<div class="layui-textarea help-images">
{foreach $vo.images as $img}
<div class="uploadimage upload-image-lgbox" data-tips-image data-lazy-src="{$img}"></div>
@ -21,18 +21,18 @@
{/notempty}
<label class="layui-form-item relative block">
<span class="help-label"><b>联系电话</b>Feedback Phone</span>
<input maxlength="100" class="layui-input" name="phone" value='{$vo.phone|default=""}' placeholder="请输入联系电话">
<span class="help-label"><b>{:lang('联系电话')}</b>Feedback Phone</span>
<input maxlength="100" class="layui-input" name="phone" value='{$vo.phone|default=""}' placeholder="{:lang('请输入联系电话')}">
</label>
<label class="layui-form-item relative block label-required-prev">
<span class="help-label"><b>反馈意见</b>Feedback Content</span>
<textarea maxlength="500" class="layui-textarea" name="content" placeholder="请输入反馈意见">{$vo.content|default=""}</textarea>
<span class="help-label"><b>{:lang('反馈意见')}</b>Feedback Content</span>
<textarea maxlength="500" class="layui-textarea" name="content" placeholder="{:lang('请输入反馈意见')}">{$vo.content|default=""}</textarea>
</label>
<label class="layui-form-item relative block label-required-prev">
<span class="help-label"><b>回复内容</b>Feedback Reply</span>
<textarea style="height:300px" class="layui-textarea" name="reply" placeholder="请输入回复内容" required>{$vo.reply|default=''}</textarea>
<span class="help-label"><b>{:lang('回复内容')}</b>Feedback Reply</span>
<textarea style="height:300px" class="layui-textarea" name="reply" placeholder="{:lang('请输入回复内容')}" required>{$vo.reply|default=''}</textarea>
</label>
<div class="hr-line-dashed"></div>
@ -40,8 +40,8 @@
{notempty name='vo.reply_time'}<input type='hidden' value='{$vo.reply_time}' name='reply_time'>{/notempty}
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" type='button' data-target-backup data-confirm="确定要取消编辑吗?">取消编辑</button>
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" type='button' data-target-backup data-confirm="{:lang('确定要取消编辑吗?')}">{:lang('取消编辑')}</button>
</div>
</div>
</form>

View File

@ -2,14 +2,14 @@
{block name="button"}
<!--{if auth("remove")}-->
<button data-action='{:url("remove")}' data-table-id="FeedbackData" data-rule="id#{id}" data-confirm="确定要批量删除吗?" class='layui-btn layui-btn-sm layui-btn-primary'>批量删除</button>
<button data-action='{:url("remove")}' data-table-id="FeedbackData" data-rule="id#{id}" data-confirm="{:lang('确定要批量删除吗?')}" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('批量删除')}</button>
<!--{/if}-->
{/block}
{block name="content"}
<div class="layui-tab layui-tab-card think-bg-white">
<ul class="layui-tab-title">
{foreach ['index'=>'意见反馈','recycle'=>'回 收 站'] as $k=>$v}
{foreach ['index'=>lang('意见反馈'),'recycle'=>lang('回 收 站')] as $k=>$v}
{if isset($type) and $type eq $k}
<li class="layui-this color-green" data-open="{:url('index')}?type={$k}">{$v}</li>
{else}
@ -31,19 +31,19 @@
even: true, height: 'full', sort: {field: 'sort desc,id', type: 'desc'},
cols: [[
{checkbox: true, fixed: true},
{field: 'sort', title: '排序权重', align: 'center', width: 100, sort: true, templet: '#SortInputTpl'},
{field: 'sort', title: '{:lang("排序权重")}', align: 'center', width: 100, sort: true, templet: '#SortInputTpl'},
{
title: '提交用户', minWidth: 200, width: '10%', templet: function (d) {
title: '{:lang("提交用户")}', minWidth: 200, width: '10%', templet: function (d) {
return showTableImage(d.user_headimg, true, '', (d.user_nickname || '') + " " + (d.user_phone || ''));
}
},
{field: 'phone', title: '联系电话', align: 'center', minWidth: 140, templet: '<div>{{d.phone||"-"}}</div>'},
{field: 'content', title: '反馈意见', align: 'left', minWidth: 150, templet: '<div>{{d.content||"-"}}</div>'},
{field: 'reply', title: '回复内容', align: 'left', minWidth: 150, templet: '<div>{{d.reply||"-"}}</div>'},
{field: 'status', title: '显示状态', align: 'center', minWidth: 110, templet: '#StatusSwitchTpl'},
{field: 'sync', title: '同步到常见问题', align: 'center', minWidth: 110, templet: '#ToProblemSwitchTpl'},
{field: 'create_time', title: '创建时间', align: 'center', minWidth: 170, sort: true},
{toolbar: '#toolbar', title: '操作面板', align: 'center', minWidth: 150, fixed: 'right'},
{field: 'phone', title: '{:lang("联系电话")}', align: 'center', minWidth: 140, templet: '<div>{{d.phone||"-"}}</div>'},
{field: 'content', title: '{:lang("反馈意见")}', align: 'left', minWidth: 150, templet: '<div>{{d.content||"-"}}</div>'},
{field: 'reply', title: '{:lang("回复内容")}', align: 'left', minWidth: 150, templet: '<div>{{d.reply||"-"}}</div>'},
{field: 'status', title: '{:lang("显示状态")}', align: 'center', minWidth: 110, templet: '#StatusSwitchTpl'},
{field: 'sync', title: '{:lang("同步到常见问题")}', align: 'center', minWidth: 110, templet: '#ToProblemSwitchTpl'},
{field: 'create_time', title: '{:lang("创建时间")}', align: 'center', minWidth: 170, sort: true},
{toolbar: '#toolbar', title: '{:lang("操作面板")}', align: 'center', minWidth: 150, fixed: 'right'},
]]
});
@ -77,29 +77,29 @@
<!-- 数据状态切换模板 -->
<script type="text/html" id="StatusSwitchTpl">
<!--{if auth("state")}-->
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="已显示|已隐藏" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="{:lang('已显示')}|{:lang('已隐藏')}" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<!--{else}-->
{{-d.status ? '<b class="color-green">已显示</b>' : '<b class="color-red">已隐藏</b>'}}
{{-d.status ? '<b class="color-green">' + '{:lang("已显示")}' + '</b>' : '<b class="color-red">' + '{:lang("已隐藏")}' + '</b>'}}
<!--{/if}-->
</script>
<!-- 同步到常见问题切换模板 -->
<script type="text/html" id="ToProblemSwitchTpl">
<!--{if auth("toproblem")}-->
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="已同步|未同步" lay-filter="ToProblemSwitch" {{-d.sync>0?'checked':''}}/>
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="{:lang('已同步')}|{:lang('未同步')}" lay-filter="ToProblemSwitch" {{-d.sync>0?'checked':''}}/>
<!--{else}-->
{{-d.sync ? '<b class="color-green">已同步</b>' : '<b class="color-red">未同步</b>'}}
{{-d.sync ? '<b class="color-green">' + '{:lang("已同步")}' + '</b>' : '<b class="color-red">' + '{:lang("未同步")}' + '</b>'}}
<!--{/if}-->
</script>
<!-- 数据操作工具条模板 -->
<script type="text/html" id="toolbar">
<!--{if auth('edit')}-->
<a class="layui-btn layui-btn-primary layui-btn-sm" data-open='{:url("edit")}?id={{d.id}}'> </a>
<a class="layui-btn layui-btn-primary layui-btn-sm" data-open='{:url("edit")}?id={{d.id}}'>{:lang('编 辑')}</a>
<!--{/if}-->
<!--{if auth("remove")}-->
<a class="layui-btn layui-btn-danger layui-btn-sm" data-confirm="确定要删除问题吗?" data-action="{:url('remove')}" data-value="id#{{d.id}}"> </a>
<a class="layui-btn layui-btn-danger layui-btn-sm" data-confirm="{:lang('确定要删除问题吗?')}" data-action="{:url('remove')}" data-value="id#{{d.id}}">{:lang('删 除')}</a>
<!--{/if}-->
</script>
{/block}

View File

@ -1,34 +1,34 @@
<form class="layui-form layui-form-pane form-search" action="{:sysuri()}" onsubmit="return false" method="get" autocomplete="off">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">提交用户</label>
<label class="layui-form-label">{:lang('提交用户')}</label>
<div class="layui-input-inline">
<input name="username" value="{$get.username|default=''}" placeholder="请输入提交用户" class="layui-input">
<input name="username" value="{$get.username|default=''}" placeholder="{:lang('请输入提交用户')}" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">联系电话</label>
<label class="layui-form-label">{:lang('联系电话')}</label>
<div class="layui-input-inline">
<input name="phone" value="{$get.phone|default=''}" placeholder="请输入联系电话" class="layui-input">
<input name="phone" value="{$get.phone|default=''}" placeholder="{:lang('请输入联系电话')}" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">问题描述</label>
<label class="layui-form-label">{:lang('问题描述')}</label>
<div class="layui-input-inline">
<input name="content" value="{$get.content|default=''}" placeholder="请输入问题描述" class="layui-input">
<input name="content" value="{$get.content|default=''}" placeholder="{:lang('请输入问题描述')}" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">创建时间</label>
<label class="layui-form-label">{:lang('创建时间')}</label>
<div class="layui-input-inline">
<input data-date-range name="create_time" value="{$get.create_time|default=''}" placeholder="请选择创建时间" class="layui-input">
<input data-date-range name="create_time" value="{$get.create_time|default=''}" placeholder="{:lang('请选择创建时间')}" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
</div>
</form>

View File

@ -1,8 +1,8 @@
{extend name="main"}
{block name="button"}
<button data-target-submit class='layui-btn layui-btn-sm'>保存数据</button>
<button data-target-backup class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="确认要取消编辑吗?">取消编辑</button>
<button data-target-submit class='layui-btn layui-btn-sm'>{:lang('保存数据')}</button>
<button data-target-backup class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="{:lang('确认要取消编辑吗?')}">{:lang('取消编辑')}</button>
{/block}
{block name='content'}
@ -10,21 +10,21 @@
<div class="layui-card-body">
<label class="layui-form-item relative block">
<span class="help-label"><b>问题标题</b>Problem Name</span>
<input class="layui-input" name="name" placeholder="请输入文章标题" required value='{$vo.name|default=""}'>
<span class="help-label"><b>{:lang('问题标题')}</b>Problem Name</span>
<input class="layui-input" name="name" placeholder="{:lang('请输入问题标题')}" required value='{$vo.name|default=""}'>
</label>
<label class="layui-form-item relative block">
<span class="help-label"><b>问题答案</b>Problem Remark</span>
<textarea style="height:300px" class="layui-textarea" name="content" placeholder="请输入问题回复" required>{$vo.content|default=''}</textarea>
<span class="help-label"><b>{:lang('问题答案')}</b>Problem Remark</span>
<textarea style="height:300px" class="layui-textarea" name="content" placeholder="{:lang('请输入问题答案')}" required>{$vo.content|default=''}</textarea>
</label>
<div class="hr-line-dashed"></div>
{notempty name='vo.id'}<input name='id' type='hidden' value='{$vo.id}'>{/notempty}
<div class="layui-form-item text-center">
<button class="layui-btn" type="submit">保存数据</button>
<button class="layui-btn layui-btn-danger" data-target-backup type='button' data-confirm="确定要取消编辑吗?">取消编辑</button>
<button class="layui-btn" type="submit">{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" data-target-backup type='button' data-confirm="{:lang('确定要取消编辑吗?')}">{:lang('取消编辑')}</button>
</div>
</div>
</form>

View File

@ -2,18 +2,18 @@
{block name="button"}
<!--{if auth("add")}-->
<button data-table-id="ProblemData" data-open='{:url("add")}' class='layui-btn layui-btn-sm layui-btn-primary'>添加问题</button>
<button data-table-id="ProblemData" data-open='{:url("add")}' class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('添加问题')}</button>
<!--{/if}-->
<!--{if auth("remove")}-->
<button data-table-id="ProblemData" data-action='{:url("remove")}' data-rule="id#{id}" data-confirm="确定要批量删除问题吗?" class='layui-btn layui-btn-sm layui-btn-primary'>批量删除</button>
<button data-table-id="ProblemData" data-action='{:url("remove")}' data-rule="id#{id}" data-confirm="{:lang('确定要批量删除问题吗?')}" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('批量删除')}</button>
<!--{/if}-->
{/block}
{block name="content"}
<div class="layui-tab layui-tab-card think-bg-white">
<ul class="layui-tab-title">
{foreach ['index'=>'常见问题','recycle'=>'回 收 站'] as $k=>$v}
{foreach ['index'=>lang('常见问题'),'recycle'=>lang('回 收 站')] as $k=>$v}
{if isset($type) and $type eq $k}
<li class="layui-this color-green" data-open="{:url('index')}?type={$k}">{$v}</li>
{else}
@ -36,15 +36,15 @@
sort: {field: 'sort desc,id', type: 'desc'},
cols: [[
{checkbox: true, fixed: true},
{field: 'sort', title: '排序权重', align: 'center', width: 100, sort: true, templet: '#SortInputTpl'},
{field: 'name', title: '问题标题', align: 'left', minWidth: 140},
{field: 'content', title: '问题答案', align: 'left', minWidth: 140},
{field: 'num_read', title: '阅读数', align: 'center', width: 90, sort: true},
{field: 'num_er', title: '未解决', align: 'center', width: 90, sort: true},
{field: 'num_ok', title: '已解决', align: 'center', width: 90, sort: true},
{field: 'status', title: '状态', align: 'center', width: 110, templet: '#StatusSwitchTpl'},
{field: 'create_time', title: '创建时间', align: 'center', minWidth: 170, sort: true},
{toolbar: '#toolbar', title: '操作面板', align: 'center', minWidth: 150, fixed: 'right'},
{field: 'sort', title: '{:lang("排序权重")}', align: 'center', width: 100, sort: true, templet: '#SortInputTpl'},
{field: 'name', title: '{:lang("问题标题")}', align: 'left', minWidth: 140},
{field: 'content', title: '{:lang("问题答案")}', align: 'left', minWidth: 140},
{field: 'num_read', title: '{:lang("阅读数")}', align: 'center', width: 90, sort: true},
{field: 'num_er', title: '{:lang("未解决")}', align: 'center', width: 90, sort: true},
{field: 'num_ok', title: '{:lang("已解决")}', align: 'center', width: 90, sort: true},
{field: 'status', title: '{:lang("状态")}', align: 'center', width: 110, templet: '#StatusSwitchTpl'},
{field: 'create_time', title: '{:lang("创建时间")}', align: 'center', minWidth: 170, sort: true},
{toolbar: '#toolbar', title: '{:lang("操作面板")}', align: 'center', minWidth: 150, fixed: 'right'},
]]
});
@ -69,20 +69,20 @@
<!-- 数据状态切换模板 -->
<script type="text/html" id="StatusSwitchTpl">
<!--{if auth("state")}-->
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="已激活|已禁用" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="{:lang('已激活')}|{:lang('已禁用')}" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<!--{else}-->
{{-d.status ? '<b class="color-green">已启用</b>' : '<b class="color-red">已禁用</b>'}}
{{-d.status ? '<b class="color-green">' + '{:lang("已启用")}' + '</b>' : '<b class="color-red">' + '{:lang("已禁用")}' + '</b>'}}
<!--{/if}-->
</script>
<!-- 数据操作工具条模板 -->
<script type="text/html" id="toolbar">
<!--{if auth('edit')}-->
<a class="layui-btn layui-btn-primary layui-btn-sm" data-open='{:url("edit")}?id={{d.id}}'> </a>
<a class="layui-btn layui-btn-primary layui-btn-sm" data-open='{:url("edit")}?id={{d.id}}'>{:lang('编 辑')}</a>
<!--{/if}-->
<!--{if auth("remove")}-->
<a class="layui-btn layui-btn-danger layui-btn-sm" data-confirm="确定要删除问题吗?" data-action="{:url('remove')}" data-value="id#{{d.id}}"> </a>
<a class="layui-btn layui-btn-danger layui-btn-sm" data-confirm="{:lang('确定要删除问题吗?')}" data-action="{:url('remove')}" data-value="id#{{d.id}}">{:lang('删 除')}</a>
<!--{/if}-->
</script>
{/block}

View File

@ -1,27 +1,27 @@
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-form-pane form-search" method="get" onsubmit="return false">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">问题标题</label>
<label class="layui-form-label">{:lang('问题标题')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="name" placeholder="请输入问题标题" value="{$get.name|default=''}">
<input class="layui-input" name="name" placeholder="{:lang('请输入问题标题')}" value="{$get.name|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">问题答案</label>
<label class="layui-form-label">{:lang('问题答案')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="content" placeholder="请输入问题答案" value="{$get.content|default=''}">
<input class="layui-input" name="content" placeholder="{:lang('请输入问题答案')}" value="{$get.content|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">创建时间</label>
<label class="layui-form-label">{:lang('创建时间')}</label>
<label class="layui-input-inline">
<input class="layui-input" data-date-range name="create_time" placeholder="请选择创建时间" value="{$get.create_time|default=''}">
<input class="layui-input" data-date-range name="create_time" placeholder="{:lang('请选择创建时间')}" value="{$get.create_time|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
</div>
</form>

View File

@ -1,31 +1,31 @@
{block name="content"}
<div class="iframe-pagination notfooter">
<fieldset>
<legend>条件搜索</legend>
<legend>{:lang('条件搜索')}</legend>
<form action="{:sysuri()}" id="ProblemDataSearch" autocomplete="off" class="layui-form layui-form-pane form-search" method="get" onsubmit="return false">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">问题标题</label>
<label class="layui-form-label">{:lang('问题标题')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="name" placeholder="请输入问题标题" value="{$get.name|default=''}">
<input class="layui-input" name="name" placeholder="{:lang('请输入问题标题')}" value="{$get.name|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">问题答案</label>
<label class="layui-form-label">{:lang('问题答案')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="content" placeholder="请输入问题答案" value="{$get.content|default=''}">
<input class="layui-input" name="content" placeholder="{:lang('请输入问题答案')}" value="{$get.content|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">创建时间</label>
<label class="layui-form-label">{:lang('创建时间')}</label>
<label class="layui-input-inline">
<input class="layui-input" data-date-range name="create_time" placeholder="请选择创建时间" value="{$get.create_time|default=''}">
<input class="layui-input" data-date-range name="create_time" placeholder="{:lang('请选择创建时间')}" value="{$get.create_time|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
</div>
</form>
</fieldset>
@ -42,12 +42,12 @@
sort: {field: 'sort desc,id', type: 'desc'},
cols: [[
{field: 'id', title: 'ID', width: 60, align: 'center', sort: true},
{field: 'name', title: '问题标题', align: 'left', minWidth: 100},
{field: 'content', title: '问题答案', align: 'left', minWidth: 140, templet: '<div>{{d.content||"-"}}</div>'},
{field: 'num_read', title: '阅读数', align: 'center', width: 90, sort: true, style: 'color:blue;font-size:16px'},
{field: 'status', title: '状态', align: 'center', width: 80, templet: '#StatusSwitchProblemDataTpl'},
{field: 'create_time', title: '创建时间', align: 'center', width: 170, sort: true},
{toolbar: '#SelectToolbar', title: '操作', align: 'center', width: 100}
{field: 'name', title: '{:lang("问题标题")}', align: 'left', minWidth: 100},
{field: 'content', title: '{:lang("问题答案")}', align: 'left', minWidth: 140, templet: '<div>{{d.content||"-"}}</div>'},
{field: 'num_read', title: '{:lang("阅读数")}', align: 'center', width: 90, sort: true, style: 'color:blue;font-size:16px'},
{field: 'status', title: '{:lang("状态")}', align: 'center', width: 80, templet: '#StatusSwitchProblemDataTpl'},
{field: 'create_time', title: '{:lang("创建时间")}', align: 'center', width: 170, sort: true},
{toolbar: '#SelectToolbar', title: '{:lang("操作面板")}', align: 'center', width: 100}
]]
}).trigger('tool', function (item) {
window.setItemValue(item.data.id, item.data.name);
@ -58,12 +58,12 @@
<!-- 操作工具条模板 -->
<script type="text/html" id="SelectToolbar">
<a class="layui-btn layui-btn-sm" lay-event="select"> </a>
<a class="layui-btn layui-btn-sm" lay-event="select">{:lang('选 择')}</a>
</script>
<!-- 数据状态切换模板 -->
<script type="text/html" id="StatusSwitchProblemDataTpl">
{{-d.status ? '<b class="color-green">已激活</b>' : '<b class="color-red">已隐藏</b>'}}
{{-d.status ? '<b class="color-green">' + '{:lang("已激活")}' + '</b>' : '<b class="color-red">' + '{:lang("已隐藏")}' + '</b>'}}
</script>
{/block}

View File

@ -1,8 +1,8 @@
{extend name="main"}
{block name="button"}
<button data-target-submit class='layui-btn layui-btn-sm'>保存数据</button>
<button data-target-backup class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="确认要取消编辑吗?">取消编辑</button>
<button data-target-submit class='layui-btn layui-btn-sm'>{:lang('保存数据')}</button>
<button data-target-backup class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="{:lang('确认要取消编辑吗?')}">{:lang('取消编辑')}</button>
{/block}
{block name='content'}
@ -18,11 +18,11 @@
</div>
<div class="layui-col-xs9">
<label class="layui-form-item relative block">
<span class="help-label"><b>用户昵称</b>Nickname</span>
<span class="help-label"><b>{:lang('用户昵称')}</b>Nickname</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.user_nickname|default=''}">
</label>
<label class="relative block">
<span class="help-label"><b>用户账号</b>Phone</span>
<span class="help-label"><b>{:lang('用户账号')}</b>Phone</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.user_phone|default=''}">
</label>
</div>
@ -33,15 +33,15 @@
<div class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis">&#xe63f;</i>
<div class="layui-timeline-content layui-text">
<h3 class="layui-timeline-title">提交工单<span class="font-s12 ta-ml-10">{$vo.create_time}</span></h3>
<div class="layui-input layui-bg-gray ta-mt-10"><b>工单标题:</b>{$vo.name|default=""}</div>
<h3 class="layui-timeline-title">{:lang('提交工单')}<span class="font-s12 ta-ml-10">{$vo.create_time}</span></h3>
<div class="layui-input layui-bg-gray ta-mt-10"><b>{:lang('工单标题')}</b>{$vo.name|default=""}</div>
{notempty name='vo.phone'}
<div class="layui-input layui-bg-gray ta-mt-10"><b>联系电话:</b>{$vo.phone|default=""}</div>
<div class="layui-input layui-bg-gray ta-mt-10"><b>{:lang('联系电话')}</b>{$vo.phone|default=""}</div>
{/notempty}
<div class="layui-textarea layui-bg-gray ta-mt-10 ck-content"><b>工单内容:</b>{$vo.content}</div>
<div class="layui-textarea layui-bg-gray ta-mt-10 ck-content"><b>{:lang('工单内容')}</b>{$vo.content}</div>
{notempty name='vo.images'}
<div class="ta-mt-10 color-desc">
<span>工单图片:</span>
<span>{:lang('工单图片')}</span>
<div class="layui-textarea help-images layui-bg-gray">
{foreach $vo.images as $img}
<div class="uploadimage upload-image-lgbox" data-tips-image data-lazy-src="{$img}"></div>
@ -56,8 +56,8 @@
<i class="layui-icon layui-timeline-axis">&#xe63f;</i>
<div class="layui-timeline-content layui-text">
<h3 class="layui-timeline-title">
{if $c.unid>0} 用户回复<span class="font-s12 ta-ml-10">{$c.create_time}</span>{/if}
{if $c.reply_by>0} 后台回复<span class="font-s12 ta-ml-10">{$c.create_time}</span>{/if}
{if $c.unid>0} {:lang('用户回复')}<span class="font-s12 ta-ml-10">{$c.create_time}</span>{/if}
{if $c.reply_by>0} {:lang('后台回复')}<span class="font-s12 ta-ml-10">{$c.create_time}</span>{/if}
</h3>
<div class="layui-textarea layui-bg-gray ck-content">{$c.content|raw}</div>
</div>
@ -67,9 +67,9 @@
<div class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis">&#xe756;</i>
<div class="layui-timeline-content layui-text">
<h3 class="layui-timeline-title">立即回复</h3>
<h3 class="layui-timeline-title">{:lang('立即回复')}</h3>
<label>
<textarea class="layui-hide" name="content" placeholder="请输入回复内容"></textarea>
<textarea class="layui-hide" name="content" placeholder="{:lang('请输入回复内容')}"></textarea>
</label>
</div>
</div>
@ -79,8 +79,8 @@
{notempty name='vo.id'}<input type='hidden' value='{$vo.id}' name='id'>{/notempty}
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" type='button' data-target-backup data-confirm="确定要取消编辑吗?">取消编辑</button>
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" type='button' data-target-backup data-confirm="{:lang('确定要取消编辑吗?')}">{:lang('取消编辑')}</button>
</div>
</div>
</form>

View File

@ -2,7 +2,7 @@
{block name="button"}
<!--{if auth("remove")}-->
<button data-action='{:url("remove")}' data-table-id="QuestionData" data-rule="id#{id}" data-confirm="确定要批量删除问题吗?" class='layui-btn layui-btn-sm layui-btn-primary'>批量删除</button>
<button data-action='{:url("remove")}' data-table-id="QuestionData" data-rule="id#{id}" data-confirm="{:lang('确定要批量删除问题吗?')}" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('批量删除')}</button>
<!--{/if}-->
{/block}
@ -26,21 +26,21 @@
{checkbox: true, fixed: true}, {field: 'sort', hide: true},
// {field: 'sort', title: '排序权重', align: 'center', width: 100, sort: true, templet: '#SortInputTpl'},
{
title: '提交用户', minWidth: 200, width: '10%', templet: function (d) {
title: '{:lang("提交用户")}', minWidth: 200, width: '10%', templet: function (d) {
return showTableImage(d.user_headimg, true, '', (d.user_nickname || '') + " " + (d.user_phone || ''));
}
},
{field: 'name', title: '工单标题', align: 'left', minWidth: 140},
{field: 'content', title: '工单内容', align: 'left', minWidth: 180, templet: '<div>{{d.content||"-"}}</div>'},
{field: 'name', title: '{:lang("工单标题")}', align: 'left', minWidth: 140},
{field: 'content', title: '{:lang("工单内容")}', align: 'left', minWidth: 180, templet: '<div>{{d.content||"-"}}</div>'},
{
field: 'status', title: '工单状态', align: 'center', width: 110, templet: function (d) {
field: 'status', title: '{:lang("工单状态")}', align: 'center', width: 110, templet: function (d) {
//状态0取消,1新工单,2后台回复,3前台回复,4已完结
return ['取消', '新工单', '后台回复', '前台回复', '已完结'][d.status] || '未知';
return ['{:lang("取消")}', '{:lang("新工单")}', '{:lang("后台回复")}', '{:lang("前台回复")}', '{:lang("已完结")}'][d.status] || '{:lang("未知")}';
}
},
{field: 'phone', title: '联系电话', align: 'left', minWidth: 100, width: '10%'},
{field: 'create_time', title: '创建时间', align: 'center', minWidth: 170, width: '10%', sort: true},
{toolbar: '#toolbar', title: '操作面板', align: 'center', minWidth: 150, width: '10%', fixed: 'right'},
{field: 'phone', title: '{:lang("联系电话")}', align: 'left', minWidth: 100, width: '10%'},
{field: 'create_time', title: '{:lang("创建时间")}', align: 'center', minWidth: 170, width: '10%', sort: true},
{toolbar: '#toolbar', title: '{:lang("操作面板")}', align: 'center', minWidth: 150, width: '10%', fixed: 'right'},
]]
});
@ -64,10 +64,10 @@
<!-- 数据操作工具条模板 -->
<script type="text/html" id="toolbar">
<!--{if auth('edit')}-->
<a class="layui-btn layui-btn-primary layui-btn-sm" data-open='{:url("edit")}?id={{d.id}}'> </a>
<a class="layui-btn layui-btn-primary layui-btn-sm" data-open='{:url("edit")}?id={{d.id}}'>{:lang('回 复')}</a>
<!--{/if}-->
<!--{if auth("remove")}-->
<a class="layui-btn layui-btn-danger layui-btn-sm" data-confirm="确定要删除问题吗?" data-action="{:url('remove')}" data-value="id#{{d.id}}"> </a>
<a class="layui-btn layui-btn-danger layui-btn-sm" data-confirm="{:lang('确定要删除问题吗?')}" data-action="{:url('remove')}" data-value="id#{{d.id}}">{:lang('删 除')}</a>
<!--{/if}-->
</script>
{/block}

View File

@ -3,31 +3,31 @@
<form class="layui-form layui-form-pane form-search" action="{:sysuri()}" onsubmit="return false" method="get" autocomplete="off">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">提交用户</label>
<label class="layui-form-label">{:lang('提交用户')}</label>
<div class="layui-input-inline">
<input name="username" value="{$get.username|default=''}" placeholder="请输入提交用户" class="layui-input">
<input name="username" value="{$get.username|default=''}" placeholder="{:lang('请输入提交用户')}" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">工单标题</label>
<label class="layui-form-label">{:lang('工单标题')}</label>
<div class="layui-input-inline">
<input name="name" value="{$get.name|default=''}" placeholder="请输入工单标题" class="layui-input">
<input name="name" value="{$get.name|default=''}" placeholder="{:lang('请输入工单标题')}" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">工单内容</label>
<label class="layui-form-label">{:lang('工单内容')}</label>
<div class="layui-input-inline">
<input name="content" value="{$get.content|default=''}" placeholder="请输入工单内容" class="layui-input">
<input name="content" value="{$get.content|default=''}" placeholder="{:lang('请输入工单内容')}" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">工单状态</label>
<label class="layui-form-label">{:lang('工单状态')}</label>
<div class="layui-input-inline">
<select name="status">
<option value="">-- 全部 --</option>
<option value="">{:lang('-- 全部 --')}</option>
{foreach $types as $k=>$v}
{if isset($get.status) and $get.status eq $k}
<option value="{$k}" selected>{$v}</option>
@ -39,14 +39,14 @@
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">创建时间</label>
<label class="layui-form-label">{:lang('创建时间')}</label>
<div class="layui-input-inline">
<input data-date-range name="create_time" value="{$get.create_time|default=''}" placeholder="请选择创建时间" class="layui-input">
<input data-date-range name="create_time" value="{$get.create_time|default=''}" placeholder="{:lang('请选择创建时间')}" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
</div>
</form>
</fieldset>

View File

@ -13,7 +13,7 @@
<div class="layui-card-html">
{notempty name='showErrorMessage'}
<div class="think-box-notify" type="error">
<b>系统提示:</b><span>{$showErrorMessage|raw}</span>
<b>{:lang('系统提示')}</b><span>{$showErrorMessage|raw}</span>
</div>
{/notempty}
{block name='content'}{/block}

View File

@ -2,7 +2,7 @@
<div class="layui-card-body ta-pl-40">
<div class="layui-form-item label-required-prev">
<span class="help-label"><b>绑定上级分类</b>Category Parent</span>
<span class="help-label"><b>{:lang('绑定上级分类')}</b>Category Parent</span>
<select class='layui-select' name='pid' lay-search>
{foreach $cates as $cate}
{eq name='cate.id' value='$vo.pid|default=0'}
@ -11,30 +11,30 @@
<option value='{$cate.id}'>{$cate.spl|raw}{$cate.name}</option>
{/eq}{/foreach}
</select>
<span class="help-block"><b>必选,</b>请选择上级分类或顶级分类(目前最多支持{$cateLevel|default=0}级分类)</span>
<span class="help-block"><b>{:lang('必选')}</b>{:lang('请选择上级分类或顶级分类(目前最多支持')}{$cateLevel|default=0}{:lang('级分类)')}</span>
</div>
<label class="layui-form-item relative block">
<span class="help-label"><b>商品分类名称</b>Category Name</span>
<input class="layui-input" name="name" placeholder="请输入分类名称" required value='{$vo.name|default=""}'>
<span class="help-block"><b>必填,</b>请填写商品分类名称,建议字符不要太长,一般 4-6 个汉字</span>
<span class="help-label"><b>{:lang('商品分类名称')}</b>Category Name</span>
<input class="layui-input" name="name" placeholder="{:lang('请输入分类名称')}" required value='{$vo.name|default=""}'>
<span class="help-block"><b>{:lang('必填')}</b>{:lang('请填写商品分类名称,建议字符不要太长,一般 4-6 个汉字')}</span>
</label>
<div class="layui-form-item relative block">
<span class="help-label"><b>商品分类图标</b>Category Cover</span>
<span class="help-label"><b>{:lang('商品分类图标')}</b>Category Cover</span>
<div class="relative block">
<label>
<input class="layui-input think-bg-gray" data-tips-hover data-tips-image readonly name="cover" placeholder="请上传商品分类图标" value='{$vo.cover|default=""}'>
<input class="layui-input think-bg-gray" data-tips-hover data-tips-image readonly name="cover" placeholder="{:lang('请上传商品分类图标')}" value='{$vo.cover|default=""}'>
</label>
<a class="input-right-icon layui-icon layui-icon-upload" data-field="cover" data-file data-type="png,jpg,gif"></a>
</div>
<span class="help-block"><b>可选,</b>请上传商品分类图标,需要是 http 可访问的图片资源链接</span>
<span class="help-block"><b>{:lang('可选')}</b>{:lang('请上传商品分类图标,需要是 http 可访问的图片资源链接')}</span>
</div>
<label class="layui-form-item relative block">
<span class="color-green font-w7">商品分类描述</span>
<span class="color-green font-w7">{:lang('商品分类描述')}</span>
<span class="color-desc ta-ml-5">Category Remark</span>
<textarea class="layui-textarea" name="remark" placeholder="请输入分类描述">{$vo.remark|default=''}</textarea>
<textarea class="layui-textarea" name="remark" placeholder="{:lang('请输入分类描述')}">{$vo.remark|default=''}</textarea>
</label>
</div>
@ -42,8 +42,8 @@
{notempty name='vo.id'}<input name='id' type='hidden' value='{$vo.id}'>{/notempty}
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" data-close type='button' data-confirm="确定要取消编辑吗?">取消编辑</button>
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" data-close type='button' data-confirm="{:lang('确定要取消编辑吗?')}">{:lang('取消编辑')}</button>
</div>
</form>

View File

@ -1,11 +1,11 @@
<div class="think-box-notify">
<b>注意:</b>商品分类需要在上传商品前添加,当商品分类关联有商品时不建议进行 <b class="color-blue">移动</b> <b class="color-blue">删除</b> 操作!
<b>{:lang('注意')}</b>{:lang('商品分类需要在上传商品前添加,当商品分类关联有商品时不建议进行')} <b class="color-blue">{:lang('移动')}</b> {:lang('')} <b class="color-blue">{:lang('删除')}</b> {:lang('操作')}!
<div class="pull-right" style="margin-top:-8px">
<!--{if auth("add")}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="CateTable" data-modal='{:url("add")}' data-title="添加分类">添加分类</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="CateTable" data-modal='{:url("add")}' data-title="{:lang('添加分类')}">{:lang('添加分类')}</button>
<!--{/if}-->
<!--{if auth("remove")}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="CateTable" data-action='{:url("remove")}' data-rule="id#{sps}">删除分类</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-table-id="CateTable" data-action='{:url("remove")}' data-rule="id#{sps}">{:lang('删除分类')}</button>
<!--{/if}-->
</div>
</div>
@ -21,11 +21,11 @@
sort: {field: 'sort desc,id', type: 'asc'},
cols: [[
{checkbox: true, fixed: true},
{field: 'sort', title: '排序权重', width: 100, align: 'center', sort: true, templet: '#SortInputTplCate'},
{field: 'name', title: '分类名称', minWidth: 220, templet: '<div><span class="color-desc">{{d.spl}}</span>{{d.name}}</div>'},
{field: 'status', title: '分类状态', width: 110, align: 'center', templet: '#StatusSwitchTplCate'},
{field: 'create_time', title: '创建时间', width: 170, align: 'center'},
{toolbar: '#ToolBarCate', title: '操作面板', width: 220, align: 'center', fixed: 'right'},
{field: 'sort', title: '{:lang("排序权重")}', width: 100, align: 'center', sort: true, templet: '#SortInputTplCate'},
{field: 'name', title: '{:lang("分类名称")}', minWidth: 220, templet: '<div><span class="color-desc">{{d.spl}}</span>{{d.name}}</div>'},
{field: 'status', title: '{:lang("分类状态")}', width: 110, align: 'center', templet: '#StatusSwitchTplCate'},
{field: 'create_time', title: '{:lang("创建时间")}', width: 170, align: 'center'},
{toolbar: '#ToolBarCate', title: '{:lang("操作面板")}', width: 220, align: 'center', fixed: 'right'},
]]
});
@ -45,9 +45,9 @@
<!-- 数据状态切换模板 -->
<script type="text/html" id="StatusSwitchTplCate">
<!--{if auth("state")}-->
<input type="checkbox" value="{{d.sps}}|{{d.spp}}" lay-text="已激活|已禁用" lay-filter="StatusSwitch" lay-skin="switch" {{-d.status>0?'checked':''}}>
<input type="checkbox" value="{{d.sps}}|{{d.spp}}" lay-text="{:lang('已激活')}|{:lang('已禁用')}" lay-filter="StatusSwitch" lay-skin="switch" {{-d.status>0?'checked':''}}>
<!--{else}-->
{{-d.status ? '<b class="color-green">已激活</b>' : '<b class="color-red">已禁用</b>'}}
{{-d.status ? '<b class="color-green">' + '{:lang("已激活")}' + '</b>' : '<b class="color-red">' + '{:lang("已禁用")}' + '</b>'}}
<!--{/if}-->
</script>
@ -61,18 +61,18 @@
<!--{if auth('add')}-->
{{# if(d.spt<'{$maxLevel-1}'){ }}
<a class="layui-btn layui-btn-sm layui-btn-primary" data-title="添加商品分类" data-modal='{:url("add")}?pid={{d.id}}'> </a>
<a class="layui-btn layui-btn-sm layui-btn-primary" data-title="{:lang('添加商品分类')}" data-modal='{:url("add")}?pid={{d.id}}'>{:lang('添 加')}</a>
{{# }else{ }}
<a class="layui-btn layui-btn-sm layui-btn-disabled"> </a>
<a class="layui-btn layui-btn-sm layui-btn-disabled">{:lang('添 加')}</a>
{{# } }}
<!--{/if}-->
<!--{if auth('edit')}-->
<a class="layui-btn layui-btn-sm" data-title="编辑商品分类" data-modal='{:url("edit")}?id={{d.id}}'> </a>
<a class="layui-btn layui-btn-sm" data-title="{:lang('编辑商品分类')}" data-modal='{:url("edit")}?id={{d.id}}'>{:lang('编 辑')}</a>
<!--{/if}-->
<!--{if auth('remove')}-->
<a class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="确定要删除此分类吗?" data-action="{:url('remove')}" data-value="id#{{d.sps}}"> </a>
<a class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="{:lang('确定要删除此分类吗?')}" data-action="{:url('remove')}" data-value="id#{{d.sps}}">{:lang('删 除')}</a>
<!--{/if}-->
</script>

View File

@ -10,12 +10,12 @@
cols: [[
{checkbox: true, fixed: true, hide: true},
{field: 'sort', hide: true},
{field: 'name', title: '分类名称', minWidth: 220, templet: '<div><span class="color-desc">{{d.spl}}</span>{{d.name}}</div>'},
{field: 'create_time', title: '创建时间', width: 170, align: 'center'},
{toolbar: '#SelectToolbar', title: '操作面板', width: 160, align: 'center', fixed: 'right'},
{field: 'name', title: '{:lang("分类名称")}', minWidth: 220, templet: '<div><span class="color-desc">{{d.spl}}</span>{{d.name}}</div>'},
{field: 'create_time', title: '{:lang("创建时间")}', width: 170, align: 'center'},
{toolbar: '#SelectToolbar', title: '{:lang("操作面板")}', width: 160, align: 'center', fixed: 'right'},
]]
}).trigger('tool', function (item) {
let attr = ['商品分类', item.data.id, item.data.name];
let attr = ['{:lang("商品分类")}', item.data.id, item.data.name];
window.setItemValue(item.data, attr.join('#'));
$.msg.closeThisModal(this);
});
@ -25,8 +25,8 @@
<!-- 操作工具条模板 -->
<script type="text/html" id="SelectToolbar">
{{# if (typeof checkItemValue !== 'function' || checkItemValue(d.id)){ }}
<a class="layui-btn layui-btn-sm" lay-event="select"> </a>
<a class="layui-btn layui-btn-sm" lay-event="select">{:lang('选 择')}</a>
{{# }else{ }}
<a class="layui-btn layui-btn-sm layui-btn-disabled"> </a>
<a class="layui-btn layui-btn-sm layui-btn-disabled">{:lang('已 选')}</a>
{{# } }}
</script>

View File

@ -1,8 +1,8 @@
{extend name="main"}
{block name="button"}
<button data-target-submit class='layui-btn layui-btn-sm'>保存数据</button>
<button data-target-backup class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="确认要取消编辑吗?">取消编辑</button>
<button data-target-submit class='layui-btn layui-btn-sm'>{:lang('保存数据')}</button>
<button data-target-backup class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="{:lang('确认要取消编辑吗?')}">{:lang('取消编辑')}</button>
{/block}
{block name="content"}
@ -12,7 +12,7 @@
<!--{notempty name='marks'}-->
<div class="layui-form-item">
<span class="help-label label-required-prev"><b>商品标签</b>Goods Mark</span>
<span class="help-label label-required-prev"><b>{:lang('商品标签')}</b>Goods Mark</span>
<div class="layui-textarea help-checks">
{foreach $marks as $mark}
<label class="think-checkbox">
@ -29,7 +29,7 @@
<!--{notempty name='cates'}-->
<div class="layui-form-item block relative">
<span class="help-label label-required-prev"><b>所属分类</b>Category Name</span>
<span class="help-label label-required-prev"><b>{:lang('所属分类')}</b>Category Name</span>
<select class="layui-select" lay-search name="cates">
{foreach $cates as $cate}{if in_array($cate.id, $vo.cates)}
<option selected value="{:arr2str($cate.ids)}">{:join(' ', $cate.names)}</option>
@ -41,17 +41,17 @@
<!--{/notempty}-->
<label class="layui-form-item block relative">
<span class="help-label"><b>商品名称</b>Product Name</span>
<input class="layui-input" name="name" placeholder="请输入商品名称" vali-name="商品名称" required value="{$vo.name|default=''}">
<span class="help-label"><b>{:lang('商品名称')}</b>Product Name</span>
<input class="layui-input" name="name" placeholder="{:lang('请输入商品名称')}" vali-name="{:lang('商品名称')}" required value="{$vo.name|default=''}">
</label>
<div class="layui-form-item">
<span class="help-label label-required-prev"><b>商品封面及轮播图片</b>Cover and Pictures</span>
<span class="help-label label-required-prev"><b>{:lang('商品封面及轮播图片')}</b>Cover and Pictures</span>
<table class="layui-table">
<thead>
<tr>
<th class="text-center">商品封面</th>
<th class="full-width">轮播图片 <span class="color-desc font-w1">( 轮播图片推荐的宽高比为 5:3 )</span></th>
<th class="text-center">{:lang('商品封面')}</th>
<th class="full-width">{:lang('轮播图片')} <span class="color-desc font-w1">( {:lang('轮播图片推荐的宽高比为 5:3')} )</span></th>
</tr>
<tr>
<td class="text-center text-top ta-p-0">
@ -72,7 +72,7 @@
</div>
<div class="layui-form-item block relative">
<span class="help-label label-required-prev"><b>物流配送</b>Express Template</span>
<span class="help-label label-required-prev"><b>{:lang('物流配送')}</b>Express Template</span>
<select class="layui-select" name="delivery_code" lay-search>
{foreach $deliverys as $delivery}{if isset($vo.delivery_code) and $vo.delivery_code eq $delivery.code}
<option selected value="{$delivery.code}">[ {$delivery.code} ] {$delivery.name|default=''}{notempty name='delivery.company'} ( {:join('、',$delivery.company)} ){/notempty}</option>
@ -86,73 +86,73 @@
<div class="flex flex-wrap">
<fieldset class="layui-bg-gray">
<legend><span class="layui-badge think-bg-violet">商品返佣配置</span></legend>
<legend><span class="layui-badge think-bg-violet">{:lang('商品返佣配置')}</span></legend>
<div class="layui-input">
{empty name='vo.rebate_type'}{assign name='vo.rebate_type' value='0'}{/empty}
{foreach ['普通商品','返佣商品'] as $k => $v}
{foreach [lang('普通商品'),lang('返佣商品')] as $k => $v}
{if isset($vo.rebate_type) and $vo.rebate_type eq $k}
<input name="rebate_type" title="{$v}" type="radio" value="{$k}" checked>
{else}
<input name="rebate_type" title="{$v}" type="radio" value="{$k}">
{/if}{/foreach}
</div>
<div class="help-block nowrap">分佣计算时会基于线上支付金额进行计算。</div>
<div class="help-block nowrap">{:lang('分佣计算时会基于线上支付金额进行计算。')}</div>
</fieldset>
<!--{if isset($agents) and count($agents)>1}-->
<fieldset class="layui-bg-gray">
<legend><span class="layui-badge think-bg-violet">赋予推广权限</span></legend>
<legend><span class="layui-badge think-bg-violet">{:lang('赋予推广权限')}</span></legend>
<div class="font-code">
<select class="layui-select" name="level_agent">
{foreach $agents as $upgrade}
{if isset($vo.level_agent) and $vo.level_agent eq $upgrade.number}
<option value="{$upgrade.number|default=0}" selected>
[ {$upgrade.prefix|default='0'} ] {if $upgrade.number>0}赋予权限,{$upgrade.name|default=''}{else}不赋权限,默认身份{/if}
[ {$upgrade.prefix|default='0'} ] {if $upgrade.number>0}{:lang('赋予权限,')}{$upgrade.name|default=''}{else}{:lang('不赋权限,默认身份')}{/if}
</option>
{else}
<option value="{$upgrade.number|default=0}">
[ {$upgrade.prefix|default='0'} ] {if $upgrade.number>0}赋予权限,{$upgrade.name|default=''}{else}不赋权限,默认身份{/if}
[ {$upgrade.prefix|default='0'} ] {if $upgrade.number>0}{:lang('赋予权限,')}{$upgrade.name|default=''}{else}{:lang('不赋权限,默认身份')}{/if}
</option>
{/if}{/foreach}
</select>
</div>
<div class="help-block nowrap">给会员赋予代理身份后可享有推广权益。</div>
<div class="help-block nowrap">{:lang('给会员赋予代理身份后可享有推广权益。')}</div>
</fieldset>
<!--{/if}-->
<!--{if isset($upgrades) and count($upgrades)>1}-->
<fieldset class="layui-bg-gray notselect">
<legend><span class="layui-badge think-bg-violet">赋予会员权限</span></legend>
<legend><span class="layui-badge think-bg-violet">{:lang('赋予会员权限')}</span></legend>
<div class="font-code">
<select class="layui-select" name="level_upgrade">
{foreach $upgrades as $upgrade}
{if isset($vo.level_upgrade) and $vo.level_upgrade eq $upgrade.number}
<option value="{$upgrade.number|default=0}" selected>
[ {$upgrade.prefix|default='0'} ] {if $upgrade.number eq 0} 入会礼包,默认等级 {elseif $upgrade.number>0} 升级礼包,{$upgrade.name|default=''}{else} {$upgrade.name|default=''} {/if}
[ {$upgrade.prefix|default='0'} ] {if $upgrade.number eq 0} {:lang('入会礼包,默认等级')} {elseif $upgrade.number>0} {:lang('升级礼包,')}{$upgrade.name|default=''}{else} {$upgrade.name|default=''} {/if}
</option>
{else}
<option value="{$upgrade.number|default=0}">
[ {$upgrade.prefix|default='0'} ] {if $upgrade.number eq 0} 入会礼包,默认等级 {elseif $upgrade.number>0} 升级礼包,{$upgrade.name|default=''}{else} {$upgrade.name|default=''} {/if}
[ {$upgrade.prefix|default='0'} ] {if $upgrade.number eq 0} {:lang('入会礼包,默认等级')} {elseif $upgrade.number>0} {:lang('升级礼包,')}{$upgrade.name|default=''}{else} {$upgrade.name|default=''} {/if}
</option>
{/if}{/foreach}
</select>
</div>
<span class="help-block">购买商品后可直接升级到该等级。</span>
<span class="help-block">{:lang('购买商品后可直接升级到该等级。')}</span>
</fieldset>
<fieldset class="layui-bg-gray notselect">
<legend><span class="layui-badge think-bg-violet">限制购买等级</span></legend>
<legend><span class="layui-badge think-bg-violet">{:lang('限制购买等级')}</span></legend>
<div class="font-code">
<select class="layui-select" name="limit_lowvip">
<option value="0">[ - ] 不限等级</option>
<option value="0">[ - ] {:lang('不限等级')}</option>
{foreach $upgrades as $upgrade}{if $upgrade.number>0}{if isset($vo.limit_lowvip) and $vo.limit_lowvip eq $upgrade.number}
<option value="{$upgrade.number|default=0}" selected>[ {$upgrade.number|default=0} ] 最低等级,{$upgrade.name|default=''}</option>
<option value="{$upgrade.number|default=0}" selected>[ {$upgrade.number|default=0} ] {:lang('最低等级,')}{$upgrade.name|default=''}</option>
{else}
<option value="{$upgrade.number|default=0}">[ {$upgrade.number|default=0} ] 最低等级,{$upgrade.name|default=''}</option>
<option value="{$upgrade.number|default=0}">[ {$upgrade.number|default=0} ] {:lang('最低等级,')}{$upgrade.name|default=''}</option>
{/if}{/if}{/foreach}
</select>
</div>
<span class="help-block">限制低于该等级的用户不能购买。</span>
<span class="help-block">{:lang('限制低于该等级的用户不能购买。')}</span>
</fieldset>
<!--{else}-->
<input type="hidden" name="limit_lowvip" value="0">
@ -160,15 +160,15 @@
<!--{/if}-->
<fieldset class="layui-bg-gray">
<legend><span class="layui-badge think-bg-violet">限制购买数量</span></legend>
<legend><span class="layui-badge think-bg-violet">{:lang('限制购买数量')}</span></legend>
<label>
<input class="layui-input" type="number" data-blur-number="0" lay-affix="number" min="0" name="limit_maxnum" placeholder="请输入商品限购数量" value="{$vo.limit_maxnum|default=0}">
<span class="help-block">限制每人购买数量,为 0 时表示不限制。</span>
<input class="layui-input" type="number" data-blur-number="0" lay-affix="number" min="0" name="limit_maxnum" placeholder="{:lang('请输入商品限购数量')}" value="{$vo.limit_maxnum|default=0}">
<span class="help-block">{:lang('限制每人购买数量,为 0 时表示不限制。')}</span>
</label>
</fieldset>
<!--{if isset($discounts) and count($discounts)>1}-->
<fieldset class="layui-bg-gray">
<legend><span class="layui-badge think-bg-violet">会员折扣方案</span></legend>
<legend><span class="layui-badge think-bg-violet">{:lang('会员折扣方案')}</span></legend>
<select class="layui-select" name="discount_id" lay-search>
{foreach $discounts as $discount}{if isset($vo.discount_id) and $vo.discount_id eq $discount.id}
<option selected value="{$discount.id|default=0}">{$discount.name|default='0'}</option>
@ -176,7 +176,7 @@
<option value="{$discount.id|default=0}">{$discount.name|default='0'}</option>
{/if}{/foreach}
</select>
<span class="help-block">当会员等级达到指定等级后可享有折扣。</span>
<span class="help-block">{:lang('当会员等级达到指定等级后可享有折扣。')}</span>
</fieldset>
<!--{else}-->
<input type="hidden" name="discount_id" value="0">
@ -186,78 +186,78 @@
<div class="layui-form-item" id="GoodsSpecsEditor">
<span class="help-label label-required-prev">
<b>商品规格</b><span class="color-red font-s12">( 规格填写后不允许再次增加规格分组,规格图片推荐的宽高比为 5:3,成本价用于计算利润以及发放拥金 )</span>
<b>{:lang('商品规格')}</b><span class="color-red font-s12">( {:lang('规格填写后不允许再次增加规格分组,规格图片推荐的宽高比为 5:3成本价用于计算利润以及发放拥金')} )</span>
</span>
<div class="ta-mb-10" v-for="(x,$index) in specs" :key="$index">
<div class="goods-spec-box ta-pr-10" style="background:#ddd">
<span class="text-center goods-spec-name">分组</span>
<span class="text-center goods-spec-name">{:lang('分组')}</span>
<label class="label-required-null inline-block">
<input v-model.trim="x.name" @change="trimSpace(x,'name')" vali-name="分组" placeholder="请输入分组名称" required>
<input v-model.trim="x.name" @change="trimSpace(x,'name')" vali-name="{:lang('分组')}" placeholder="{:lang('请输入分组名称')}" required>
</label>
<div class="pull-right flex">
<a class="layui-btn layui-btn-sm layui-btn-primary goods-spec-btn" @click="addSpecVal(x.list)">增加</a>
<a class="layui-btn layui-btn-sm layui-btn-primary goods-spec-btn" @click="upSpecRow(specs,$index)" :class="{false:'layui-btn-disabled'}[$index>0]">上移</a>
<a class="layui-btn layui-btn-sm layui-btn-primary goods-spec-btn" @click="dnSpecRow(specs,$index)" :class="{false:'layui-btn-disabled'}[$index<specs.length-1]">下移</a>
<a class="layui-btn layui-btn-sm layui-btn-primary goods-spec-btn" @click="addSpecVal(x.list)">{:lang('增加')}</a>
<a class="layui-btn layui-btn-sm layui-btn-primary goods-spec-btn" @click="upSpecRow(specs,$index)" :class="{false:'layui-btn-disabled'}[$index>0]">{:lang('上移')}</a>
<a class="layui-btn layui-btn-sm layui-btn-primary goods-spec-btn" @click="dnSpecRow(specs,$index)" :class="{false:'layui-btn-disabled'}[$index<specs.length-1]">{:lang('下移')}</a>
<div style="display:none" :class="{true:'layui-show'}[mode==='add' && specs.length>0]">
<a class="layui-btn layui-btn-sm layui-btn-primary goods-spec-btn" @click="delSpecRow(specs,$index)" v-if="specs.length>1">删除</a>
<a class="layui-btn layui-btn-sm layui-btn-primary goods-spec-btn" @click="delSpecRow(specs,$index)" v-if="specs.length>1">{:lang('删除')}</a>
</div>
</div>
</div>
<div class="goods-spec-box" v-if="x.list && x.list.length>0">
<label class="label-required-null nowrap" v-for="(xx,ii) in x.list">
<input lay-ignore @click="xx.check=checkListChecked(x.list,$event.target.checked)" v-model.trim="xx.check" type="checkbox">
<input v-model.trim="xx.name" @change="trimSpace(xx,'name')" vali-name="规格" placeholder="请输入规格" required type="text">
<input v-model.trim="xx.name" @change="trimSpace(xx,'name')" vali-name="{:lang('规格')}" placeholder="{:lang('请输入规格')}" required type="text">
<a class="layui-icon layui-icon-close goods-spec-close" @click="delSpecVal(x.list,ii)" v-if="x.list.length>1"></a>
</label>
</div>
</div>
<div v-if="mode==='add'">
<a class="layui-btn layui-btn-sm layui-btn-primary" @click="addSpecRow(specs)" v-if="specs.length<3">增加规则分组</a>
<p class="ta-mt-10"><span class="color-red">请完成属性修改后再编辑下面的规格信息,否则规格数据会丢失!</span></p>
<a class="layui-btn layui-btn-sm layui-btn-primary" @click="addSpecRow(specs)" v-if="specs.length<3">{:lang('增加规则分组')}</a>
<p class="ta-mt-10"><span class="color-red">{:lang('请完成属性修改后再编辑下面的规格信息,否则规格数据会丢失!')}</span></p>
</div>
<table class="layui-table goods-spec-table">
<thead>
<tr>
<th class="layui-bg-gray" :colspan="specs.length">规格</th>
<th colspan="3">商品价格</th>
<th class="layui-bg-gray" :colspan="specs.length">{:lang('规格')}</th>
<th colspan="3">{:lang('商品价格')}</th>
{if $enableBalance || $enableIntegral}
{if $enableBalance && $enableIntegral}
<th colspan="2">允许抵扣</th>
<th colspan="2">{:lang('允许抵扣')}</th>
{else}
<th colspan="1">允许抵扣</th>
<th colspan="1">{:lang('允许抵扣')}</th>
{/if}
{/if}
{if $enableBalance || $enableIntegral}
{if $enableBalance && $enableIntegral}
<th colspan="2">赠送奖励</th>
<th colspan="2">{:lang('赠送奖励')}</th>
{else}
<th colspan="1">赠送奖励</th>
<th colspan="1">{:lang('赠送奖励')}</th>
{/if}
{/if}
<th colspan="5">其他属性</th>
<th colspan="5">{:lang('其他属性')}</th>
</tr>
<tr>
<th class="nowrap layui-bg-gray" v-for="x in specs"><b>{{x.name}}</b></th>
<th class="nowrap" @click="batchSet('cost',2,'请输入商品成本价格')"><b>成本价</b><i class="layui-icon">&#xe63c;</i></th>
<th class="nowrap" @click="batchSet('market',2,'请输入商品市场价格')"><b>市场价</b><i class="layui-icon">&#xe63c;</i></th>
<th class="nowrap" @click="batchSet('selling',2,'请输入商品销售价格')"><b>销售价</b><i class="layui-icon">&#xe63c;</i></th>
<th class="nowrap" @click="batchSet('cost',2,'{:lang('请输入商品成本价格')}')"><b>{:lang('成本价')}</b><i class="layui-icon">&#xe63c;</i></th>
<th class="nowrap" @click="batchSet('market',2,'{:lang('请输入商品市场价格')}')"><b>{:lang('市场价')}</b><i class="layui-icon">&#xe63c;</i></th>
<th class="nowrap" @click="batchSet('selling',2,'{:lang('请输入商品销售价格')}')"><b>{:lang('销售价')}</b><i class="layui-icon">&#xe63c;</i></th>
{notempty name='enableBalance'}
<th class="nowrap" @click="batchSet('allow_balance',2,'请输入最大余额支付')"><b>余额</b><i class="layui-icon">&#xe63c;</i></th>
<th class="nowrap" @click="batchSet('allow_balance',2,'{:lang('请输入最大余额支付')}')"><b>{:lang('余额')}</b><i class="layui-icon">&#xe63c;</i></th>
{/notempty}
{notempty name='enableIntegral'}
<th class="nowrap" @click="batchSet('allow_integral',0,'请输入最大积分抵扣')"><b>积分</b><i class="layui-icon">&#xe63c;</i></th>
<th class="nowrap" @click="batchSet('allow_integral',0,'{:lang('请输入最大积分抵扣')}')"><b>{:lang('积分')}</b><i class="layui-icon">&#xe63c;</i></th>
{/notempty}
{notempty name='enableBalance'}
<th class="nowrap" @click="batchSet('balance',2,'请输入赠送账户余额')"><b>余额</b><i class="layui-icon">&#xe63c;</i></th>
<th class="nowrap" @click="batchSet('balance',2,'{:lang('请输入赠送账户余额')}')"><b>{:lang('余额')}</b><i class="layui-icon">&#xe63c;</i></th>
{/notempty}
{notempty name='enableIntegral'}
<th class="nowrap" @click="batchSet('integral',2,'请输入赠送用户积分')"><b>积分</b><i class="layui-icon">&#xe63c;</i></th>
<th class="nowrap" @click="batchSet('integral',2,'{:lang('请输入赠送用户积分')}')"><b>{:lang('积分')}</b><i class="layui-icon">&#xe63c;</i></th>
{/notempty}
<th class="nowrap" @click="batchSet('virtual',0,'请输入虚拟销量数值')"><b>虚拟销量</b><i class="layui-icon">&#xe63c;</i></th>
<th class="nowrap" @click="batchSet('express',0,'请输入快递计费系数')"><b>快递系数</b><i class="layui-icon">&#xe63c;</i></th>
<th class="nowrap" width="9%" @click="batchSet('gsku',null,'请输入商品SKU代码')"><b>商品SKU</b> <i class="layui-icon">&#xe63c;</i></th>
<th class="nowrap" width="6%">规格图片</th>
<th class="nowrap" width="6%"><b>销售状态</b></th>
<th class="nowrap" @click="batchSet('virtual',0,'{:lang('请输入虚拟销量数值')}')"><b>{:lang('虚拟销量')}</b><i class="layui-icon">&#xe63c;</i></th>
<th class="nowrap" @click="batchSet('express',0,'{:lang('请输入快递计费系数')}')"><b>{:lang('快递系数')}</b><i class="layui-icon">&#xe63c;</i></th>
<th class="nowrap" width="9%" @click="batchSet('gsku',null,'{:lang('请输入商品SKU代码')}')"><b>{:lang('商品SKU')}</b> <i class="layui-icon">&#xe63c;</i></th>
<th class="nowrap" width="6%">{:lang('规格图片')}</th>
<th class="nowrap" width="6%"><b>{:lang('销售状态')}</b></th>
</tr>
</thead>
<tbody>
@ -288,7 +288,7 @@
</tr>
</tbody>
</table>
<p class="color-desc">请注意商品的 sku 在系统中仅作为显示之用,系统会根据规格生成哈希值作为商品唯一区别码!</p>
<p class="color-desc">{:lang('请注意商品的 sku 在系统中仅作为显示之用,系统会根据规格生成哈希值作为商品唯一区别码!')}</p>
<label class="layui-hide">
<textarea class="layui-textarea" name="specs">{{JSON.stringify(specs)}}</textarea>
<textarea class="layui-textarea" name="items">{{JSON.stringify(attrs)}}</textarea>
@ -296,12 +296,12 @@
</div>
<label class="layui-form-item block">
<span class="help-label"><b>商品简介描述</b></span>
<textarea class="layui-textarea" name="remark" placeholder="请输入商品简介描述">{$vo.remark|default=''|raw}</textarea>
<span class="help-label"><b>{:lang('商品简介描述')}</b></span>
<textarea class="layui-textarea" name="remark" placeholder="{:lang('请输入商品简介描述')}">{$vo.remark|default=''|raw}</textarea>
</label>
<div class="layui-form-item block">
<span class="help-label label-required-prev"><b>商品富文本详情</b></span>
<span class="help-label label-required-prev"><b>{:lang('商品富文本详情')}</b></span>
<textarea class="layui-hide" name="content">{$vo.content|default=''|raw}</textarea>
</div>
@ -309,8 +309,8 @@
<input name="code" type="hidden" value="{$vo.code}">
<div class="layui-form-item text-center">
<button class="layui-btn layui-btn-danger" type="button" data-target-backup>取消编辑</button>
<button class="layui-btn" type="submit">保存商品</button>
<button class="layui-btn layui-btn-danger" type="button" data-target-backup>{:lang('取消编辑')}</button>
<button class="layui-btn" type="submit">{:lang('保存商品')}</button>
</div>
</div>
</form>
@ -410,7 +410,7 @@
batchSet: function (name, fixed, title) {
let min = (0 / Math.pow(10, parseInt(fixed))).toFixed(fixed), max = (999999).toFixed(fixed);
layer.prompt({
title: title || (fixed === null ? '请输入内容' : '请输入数量【 取值范围1 - 999999 】'),
title: title || (fixed === null ? '{:lang('请输入内容')}' : '{:lang('请输入数量【 取值范围1 - 999999 ')}'),
formType: 0, value: fixed === null ? '' : min, success: function ($el) {
$el.find('.layui-layer-input').attr({'data-value-min': min, 'data-value-max': max, 'data-blur-number': fixed});
}
@ -478,12 +478,12 @@
// 创建分组
function addSpecRow(data) {
data.push({name: '规格分组' + (data.length || ''), list: addSpecVal([])})
data.push({name: '{:lang('规格分组')}' + (data.length || ''), list: addSpecVal([])})
}
// 创建规格
function addSpecVal(data) {
data.push({name: '规格属性' + (data.length || ''), unid: withRandString(16), check: true});
data.push({name: '{:lang('规格属性')}' + (data.length || ''), unid: withRandString(16), check: true});
return data;
}

View File

@ -2,22 +2,22 @@
{block name="button"}
<!--{if auth("add")}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-open='{:url("add")}'>添加商品</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-open='{:url("add")}'>{:lang('添加商品')}</button>
<!--{/if}-->
<!--{if auth("shop.goods.cate/index")}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-modal='{:url("shop.goods.cate/index")}' data-title="分类管理" data-width="999px">分类管理</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-modal='{:url("shop.goods.cate/index")}' data-title="{:lang('分类管理')}" data-width="999px">{:lang('分类管理')}</button>
<!--{/if}-->
<!--{if auth("shop.goods.mark/index")}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-modal='{:url("shop.goods.mark/index")}' data-title="标签管理" data-width="999px">标签管理</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-modal='{:url("shop.goods.mark/index")}' data-title="{:lang('标签管理')}" data-width="999px">{:lang('标签管理')}</button>
<!--{/if}-->
{/block}
{block name="content"}
<div class="layui-tab layui-tab-card think-bg-white">
<ul class="layui-tab-title">
{foreach ['index'=>'商品管理','recycle'=>'下架商品'] as $k=>$v}
{foreach ['index'=>lang('商品管理'),'recycle'=>lang('下架商品')] as $k=>$v}
{if isset($type) and $type eq $k}
<li class="layui-this" data-open="{:url('index')}?type={$k}">{$v}</li>
{else}
@ -39,60 +39,60 @@
sort: {field: 'sort desc,id', type: 'desc'},
cols: [[
{field: 'id', hide: true},
{field: 'sort', title: '排序权重', width: 100, align: 'center', sort: true, templet: '#SortInputTpl'},
{field: 'sort', title: '{:lang("排序权重")}', width: 100, align: 'center', sort: true, templet: '#SortInputTpl'},
{
title: '商品名称', minWidth: 220, templet: function (d) {
title: '{:lang("商品名称")}', minWidth: 220, templet: function (d) {
d.html = showTableImage(d.cover, false, 'sm')
return laytpl("<div class='flex'><div>{{-d.html}}</div><div class='ta-pl-10 nowrap'>名称:{{d.name}}<br>编号:<b class='color-blue'>{{d.code}}</b></div></div>").render(d);
return laytpl("<div class='flex'><div>{{-d.html}}</div><div class='ta-pl-10 nowrap'>" + '{:lang("名称")}' + "{{d.name}}<br>" + '{:lang("编号")}' + "<b class='color-blue'>{{d.code}}</b></div></div>").render(d);
}
},
{
title: '购买权益', minWidth: 90, align: 'center', width: '8%', templet: function (d) {
title: '{:lang("购买权益")}', minWidth: 90, align: 'center', width: '8%', templet: function (d) {
let tpls = [];
if (d.level_agent > 0) tpls.push('<span class="layui-badge think-bg-blue" style="margin-bottom:2px">推广权益</span>')
if (d.rebate_type > 0) tpls.push('<span class="layui-badge think-bg-purple" style="margin-bottom:2px">计算返佣</span>')
if (d.discount_id > 0) tpls.push('<span class="layui-badge think-bg-brown" style="margin-bottom:2px">会员折扣</span>');
if (d.level_upgrade > 0) tpls.push('<span class="layui-badge think-bg-violet" style="margin-bottom:2px">升级等级</span>');
if (d.level_upgrade > -1) tpls.push('<span class="layui-badge think-bg-violet" style="margin-bottom:2px">入会礼包</span>');
if (d.level_agent > 0) tpls.push('<span class="layui-badge think-bg-blue" style="margin-bottom:2px">' + '{:lang("推广权益")}' + '</span>')
if (d.rebate_type > 0) tpls.push('<span class="layui-badge think-bg-purple" style="margin-bottom:2px">' + '{:lang("计算返佣")}' + '</span>')
if (d.discount_id > 0) tpls.push('<span class="layui-badge think-bg-brown" style="margin-bottom:2px">' + '{:lang("会员折扣")}' + '</span>');
if (d.level_upgrade > 0) tpls.push('<span class="layui-badge think-bg-violet" style="margin-bottom:2px">' + '{:lang("升级等级")}' + '</span>');
if (d.level_upgrade > -1) tpls.push('<span class="layui-badge think-bg-violet" style="margin-bottom:2px">' + '{:lang("入会礼包")}' + '</span>');
if (tpls.length > 0) {
return laytpl('<div class="flex-center flex-wrap full-height" style="margin:-3px -5px 0 0">' + tpls.join('') + '</div>').render(d);
} else {
return '<div class="color-desc ta-pt-10">普通商品</div>';
return '<div class="color-desc ta-pt-10">' + '{:lang("普通商品")}' + '</div>';
}
}
},
{
title: '价格及库存 ', width: '15%', templet: function (d) {
title: '{:lang("价格及库存")}', width: '15%', templet: function (d) {
let tpls = [];
d.buyname = laytpl(d.limit_maxnum ? '限购 <b>{{d.limit_maxnum}}</b> 件' : '<b class="color-desc">不限购</b>').render(d);
tpls.push('{{-d.buyname}}最低售价 <b>{{Number(d.price_selling)}}</b> 元/件');
tpls.push('总库存 <b>{{d.stock_total}}</b> 件,剩余库存 <b>{{d.stock_total-d.stock_sales}}</b> 件');
d.buyname = laytpl(d.limit_maxnum ? '{:lang("限购")} <b>{{d.limit_maxnum}}</b> {:lang("")}' : '<b class="color-desc">' + '{:lang("不限购")}' + '</b>').render(d);
tpls.push('{{-d.buyname}}' + '{:lang("最低售价")}' + ' <b>{{Number(d.price_selling)}}</b> {:lang("元/件")}');
tpls.push('{:lang("总库存")} <b>{{d.stock_total}}</b> {:lang("")}' + '{:lang("剩余库存")}' + ' <b>{{d.stock_total-d.stock_sales}}</b> {:lang("")}');
return laytpl('<div class="sub-strong-blue nowrap">' + tpls.join('<br>') + '</div>').render(d);
}
},
/* {if $enableBalance || $enableIntegral} */
{
title: '余额抵扣', minWidth: 120, width: '12%', templet: function (d) {
title: '{:lang("余额抵扣")}', minWidth: 120, width: '12%', templet: function (d) {
let tpls = [];
/* {if $enableBalance} */
tpls.push('最多可用 <b>{{Math.round(d.allow_balance)}}</b> 元余额');
tpls.push('{:lang("最多可用")} <b>{{Math.round(d.allow_balance)}}</b> {:lang("元余额")}');
/* {/if} */
/* {if $enableIntegral} */
tpls.push('最多可用 <b>{{Math.round(d.allow_integral)}}</b> 个积分');
tpls.push('{:lang("最多可用积分")} <b>{{Math.round(d.allow_integral)}}</b> {:lang("积分")}');
/* {/if} */
return laytpl(tpls.join('<br>')).render(d);
}
},
/* {/if} */
{
title: '标签分类', templet: function (d) {
let tpls = '标签:' + (d.marks.length > 0 ? d.marks.join('、') : '-');
return tpls + '<br>分类:' + ((d.cates || {}).names || ['-']).join(' ');
title: '{:lang("标签分类")}', templet: function (d) {
let tpls = '{:lang("标签")}' + (d.marks.length > 0 ? d.marks.join('、') : '-');
return tpls + '<br>' + '{:lang("分类")}' + ((d.cates || {}).names || ['-']).join(' ');
}
},
{field: 'status', title: '商品状态', minWidth: 110, width: '5%', align: 'center', templet: '#StatusSwitchTpl'},
{field: 'create_time', title: '创建时间', minWidth: 200, width: '5%', templet: "<div>更新:{{d.update_time}}<br>创建:{{d.create_time}}</div>"},
{toolbar: '#toolbar', title: '操作面板', minWidth: 155, width: '5%', align: 'center', fixed: 'right'},
{field: 'status', title: '{:lang("商品状态")}', minWidth: 110, width: '5%', align: 'center', templet: '#StatusSwitchTpl'},
{field: 'create_time', title: '{:lang("创建时间")}', minWidth: 200, width: '5%', templet: '<div>{:lang("更新")}{{d.update_time}}<br>{:lang("创建")}{{d.create_time}}</div>'},
{toolbar: '#toolbar', title: '{:lang("操作面板")}', minWidth: 155, width: '5%', align: 'center', fixed: 'right'},
]]
});
@ -112,9 +112,9 @@
<script type="text/html" id="StatusSwitchTpl">
<div class="ta-pt-10 block relative"></div>
<!--{if auth("state")}-->
<input type="checkbox" value="{{d.code}}" lay-skin="switch" lay-text="已上架|已下架" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<input type="checkbox" value="{{d.code}}" lay-skin="switch" lay-text="{:lang('已上架')}|{:lang('已下架')}" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<!--{else}-->
{{-d.status ? '<b class="color-green">已上架</b>' : '<b class="color-red">已下架</b>'}}
{{-d.status ? '<b class="color-green">' + '{:lang("已上架")}' + '</b>' : '<b class="color-red">' + '{:lang("已下架")}' + '</b>'}}
<!--{/if}-->
</script>
@ -131,21 +131,21 @@
{if $type eq 'index'}
<!--{if auth('stock')}-->
<a class="layui-btn layui-btn-sm layui-btn-normal" data-title="商品入库" data-modal='{:url("stock")}?code={{d.code}}'> </a>
<a class="layui-btn layui-btn-sm layui-btn-normal" data-title="{:lang('商品入库')}" data-modal='{:url("stock")}?code={{d.code}}'>{:lang('入 库')}</a>
<!--{/if}-->
<!--{if auth('edit')}-->
<a class="layui-btn layui-btn-sm" data-open='{:url("edit")}?code={{d.code}}'> </a>
<a class="layui-btn layui-btn-sm" data-open='{:url("edit")}?code={{d.code}}'>{:lang('编 辑')}</a>
<!--{/if}-->
{else}
<!--{if auth('edit')}-->
<a class="layui-btn layui-btn-sm" data-open='{:url("edit")}?code={{d.code}}'> </a>
<a class="layui-btn layui-btn-sm" data-open='{:url("edit")}?code={{d.code}}'>{:lang('编 辑')}</a>
<!--{/if}-->
<!--{if auth('remove')}-->
<a class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="确定要删除此商品吗?" data-action="{:url('remove')}" data-value="code#{{d.code}}"> </a>
<a class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="{:lang('确定要删除此商品吗?')}" data-action="{:url('remove')}" data-value="code#{{d.code}}">{:lang('删 除')}</a>
<!--{/if}-->
{/if}
</script>

View File

@ -1,18 +1,18 @@
<form action="{:sysuri()}" autocomplete="off" data-table-id="GoodsTable" class="layui-form layui-form-pane form-search" method="get" onsubmit="return false">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">商品名称</label>
<label class="layui-form-label">{:lang('商品名称')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="name" placeholder="请输入编号或名称" value="{$get.name|default=''}">
<input class="layui-input" name="name" placeholder="{:lang('请输入编号或名称')}" value="{$get.name|default=''}">
</label>
</div>
<!--{notempty name='marks'}-->
<div class="layui-form-item layui-inline">
<label class="layui-form-label">商品标签</label>
<label class="layui-form-label">{:lang('商品标签')}</label>
<label class="layui-input-inline">
<select class="layui-select" lay-search name="marks">
<option value="">-- 全部标签 --</option>
<option value="">{:lang('-- 全部标签 --')}</option>
{foreach $marks as $mark}{if input('marks','') eq $mark}
<option selected value="{$mark}">{$mark}</option>
{else}
@ -25,11 +25,11 @@
<!--{notempty name='cates'}-->
<div class="layui-form-item layui-inline">
<label class="layui-form-label">商品分类</label>
<label class="layui-form-label">{:lang('商品分类')}</label>
<div class="layui-input-inline">
<label class="layui-input-inline">
<select class="layui-select" lay-search name="cates">
<option value="">-- 全部分类 --</option>
<option value="">{:lang('-- 全部分类 --')}</option>
{foreach $cates as $cate}{if input('cates') eq $cate.id}
<option selected value="{$cate.id}">{$cate.spl}{$cate.name|default=''}</option>
{else}
@ -42,11 +42,11 @@
<!--{/notempty}-->
<div class="layui-form-item layui-inline">
<label class="layui-form-label">返佣状态</label>
<label class="layui-form-label">{:lang('返佣状态')}</label>
<label class="layui-input-inline">
<select class="layui-select" name="rebate_type">
<option value=''>-- 全部状态 --</option>
{foreach ['非返佣的商品','是返佣的商品'] as $k=>$v}
<option value=''>{:lang('-- 全部状态 --')}</option>
{foreach [lang('非返佣的商品'),lang('是返佣的商品')] as $k=>$v}
{if input('rebate_type','-') eq $k.''}
<option selected value="{$k}">{$v}</option>
{else}
@ -57,17 +57,17 @@
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">入会礼包</label>
<label class="layui-form-label">{:lang('入会礼包')}</label>
<label class="layui-input-inline">
<select class="layui-select" name="level_upgrade">
<option value=''>-- 全部状态 --</option>
<option value=''>{:lang('-- 全部状态 --')}</option>
{foreach $upgrades as $upgrade}{if isset($vo.level_upgrade) and $vo.level_upgrade eq $upgrade.number}
<option value="{$upgrade.number|default=0}" selected>
[ {$upgrade.prefix|default='0'} ] {if $upgrade.number eq 0}入会普通礼包,不升级{elseif $upgrade.number>0}入会升级礼包,升级到【{$upgrade.name|default=''}{else} {$upgrade.name|default=''} {/if}
[ {$upgrade.prefix|default='0'} ] {if $upgrade.number eq 0}{:lang('入会普通礼包,不升级')}{elseif $upgrade.number>0}{:lang('入会升级礼包,升级到')}{$upgrade.name|default=''}{else} {$upgrade.name|default=''} {/if}
</option>
{else}
<option value="{$upgrade.number|default=0}">
[ {$upgrade.prefix|default='0'} ] {if $upgrade.number eq 0}入会普通礼包,不升级{elseif $upgrade.number>0}入会升级礼包,升级到【{$upgrade.name|default=''}{else} {$upgrade.name|default=''} {/if}
[ {$upgrade.prefix|default='0'} ] {if $upgrade.number eq 0}{:lang('入会普通礼包,不升级')}{elseif $upgrade.number>0}{:lang('入会升级礼包,升级到')}{$upgrade.name|default=''}{else} {$upgrade.name|default=''} {/if}
</option>
{/if}{/foreach}
</select>
@ -75,10 +75,10 @@
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">物流配送</label>
<label class="layui-form-label">{:lang('物流配送')}</label>
<label class="layui-input-inline">
<select class="layui-select" name="delivery_code">
<option value=''>-- 全部状态 --</option>
<option value=''>{:lang('-- 全部状态 --')}</option>
{foreach $deliverys as $k=>$v}
{if isset($get.delivery_code) and $get.delivery_code eq $k.''}
<option selected value="{$k}">{$v.name}{notempty name='v.company'} ( {:join('、',$v.company)} ){/notempty}</option>
@ -90,6 +90,6 @@
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
</div>
</form>

View File

@ -2,15 +2,15 @@
<div class="layui-card-body ta-pl-40">
<label class="layui-form-item relative block">
<span class="help-label"><b>标签名称</b>Mark Name</span>
<input class="layui-input" name="name" placeholder="请输入标签名称" required value="{$vo.name|default=''}"/>
<span class="help-block"><b>必填,</b>请填写标签名称,建议字符不要太长</span>
<span class="help-label"><b>{:lang('标签名称')}</b>Mark Name</span>
<input class="layui-input" name="name" placeholder="{:lang('请输入标签名称')}" required value="{$vo.name|default=''}"/>
<span class="help-block"><b>{:lang('必填')}</b>{:lang('请填写标签名称,建议字符不要太长')}</span>
</label>
<div class="layui-form-item relative">
<span class="help-label"><b>标签描述</b>Mark Remark</span>
<span class="help-label"><b>{:lang('标签描述')}</b>Mark Remark</span>
<label class="relative block">
<textarea class="layui-textarea" name="desc" placeholder="请输入文档描述">{$vo.desc|default=''}</textarea>
<textarea class="layui-textarea" name="desc" placeholder="{:lang('请输入文档描述')}">{$vo.desc|default=''}</textarea>
</label>
</div>
@ -20,7 +20,7 @@
{notempty name='vo.id'}<input name='id' type='hidden' value='{$vo.id}'>{/notempty}
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" data-close type='button' data-confirm="确定要取消修改吗?">取消编辑</button>
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" data-close type='button' data-confirm="{:lang('确定要取消修改吗?')}">{:lang('取消编辑')}</button>
</div>
</form>

View File

@ -3,18 +3,18 @@
<legend>{:lang('条件搜索')}</legend>
<form action="{:sysuri()}" id="TagsDataSearch" autocomplete="off" class="layui-form layui-form-pane nowrap form-search" method="get" onsubmit="return false">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">标签名称</label>
<label class="layui-form-label">{:lang('标签名称')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="name" placeholder="请输入标签名称" value="{$get.name|default=''}">
<input class="layui-input" name="name" placeholder="{:lang('请输入标签名称')}" value="{$get.name|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">使用状态</label>
<label class="layui-form-label">{:lang('使用状态')}</label>
<div class="layui-input-inline">
<select class="layui-select" name="status">
<option value=''>-- 全部 --</option>
{foreach ['已禁用的记录','已激活的记录'] as $k=>$v}
<option value=''>{:lang('-- 全部 --')}</option>
{foreach [lang('已禁用的记录'),lang('已激活的记录')] as $k=>$v}
{if isset($get.status) and $get.status eq $k.''}
<option selected value="{$k}">{$v}</option>
{else}
@ -25,17 +25,17 @@
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">创建时间</label>
<label class="layui-form-label">{:lang('创建时间')}</label>
<label class="layui-input-inline">
<input class="layui-input" data-date-range name="create_time" placeholder="请选择创建时间" value="{$get.create_time|default=''}">
<input class="layui-input" data-date-range name="create_time" placeholder="{:lang('请选择创建时间')}" value="{$get.create_time|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
<!-- {if auth('add')} -->
<button class="layui-btn" data-title="添加素材标签" data-modal="{:url('add')}" type="button">
<i class="layui-icon">&#xe61f;</i> 添 加
<button class="layui-btn" data-title="{:lang('添加素材标签')}" data-modal="{:url('add')}" type="button">
<i class="layui-icon">&#xe61f;</i> {:lang('添 加')}
</button>
<!-- {/if} -->
</div>
@ -52,11 +52,11 @@
sort: {field: 'sort desc,id', type: 'desc'},
cols: [[
{field: 'id', title: 'ID', width: 80, align: 'center', sort: true},
{field: 'sort', title: '排序权重', width: 100, align: 'center', sort: true, templet: '#SortInputTagsDataTplModal'},
{field: 'name', title: '标签名称', minWidth: 100},
{field: 'status', title: '状态', width: 110, align: 'center', templet: '#StatusSwitchTagsDataTpl'},
{field: 'create_time', title: '创建时间', minWidth: 170, align: 'center'},
{toolbar: '#ToolbarTagsData', title: '操作面板', minWidth: 100, align: 'center', fixed: 'right'},
{field: 'sort', title: '{:lang("排序权重")}', width: 100, align: 'center', sort: true, templet: '#SortInputTagsDataTplModal'},
{field: 'name', title: '{:lang("标签名称")}', minWidth: 100},
{field: 'status', title: '{:lang("状态")}', width: 110, align: 'center', templet: '#StatusSwitchTagsDataTpl'},
{field: 'create_time', title: '{:lang("创建时间")}', minWidth: 170, align: 'center'},
{toolbar: '#ToolbarTagsData', title: '{:lang("操作面板")}', minWidth: 100, align: 'center', fixed: 'right'},
]]
});
@ -76,9 +76,9 @@
<!-- 数据状态切换模板 -->
<script type="text/html" id="StatusSwitchTagsDataTpl">
<!--{if auth("state")}-->
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="已激活|已禁用" lay-filter="StatusSwitchTagsData" {{-d.status>0?'checked':''}}>
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="{:lang('已激活')}|{:lang('已禁用')}" lay-filter="StatusSwitchTagsData" {{-d.status>0?'checked':''}}>
<!--{else}-->
{{-d.status ? '<b class="color-green">已激活</b>' : '<b class="color-red">已禁用</b>'}}
{{-d.status ? '<b class="color-green">' + '{:lang("已激活")}' + '</b>' : '<b class="color-red">' + '{:lang("已禁用")}' + '</b>'}}
<!--{/if}-->
</script>
@ -91,10 +91,10 @@
<script type="text/html" id="ToolbarTagsData">
<!--{if auth("edit")}-->
<a class="layui-btn layui-btn-sm" data-title="编辑标签数据" data-modal='{:url("edit")}?id={{d.id}}'> </a>
<a class="layui-btn layui-btn-sm" data-title="{:lang('编辑标签数据')}" data-modal='{:url("edit")}?id={{d.id}}'>{:lang('编 辑')}</a>
<!--{/if}-->
<!--{if auth("remove")}-->
<a class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="确定要删除此标签吗?" data-action="{:url('remove')}" data-value="id#{{d.id}}"> </a>
<a class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="{:lang('确定要删除此标签吗?')}" data-action="{:url('remove')}" data-value="id#{{d.id}}">{:lang('删 除')}</a>
<!--{/if}-->
</script>

View File

@ -9,12 +9,12 @@
cols: [[
{checkbox: true, fixed: true, hide: true},
{field: 'sort', hide: true},
{field: 'name', title: '标签名称', minWidth: 220,},
{field: 'create_time', title: '创建时间', width: 170, align: 'center'},
{toolbar: '#SelectToolbar', title: '操作面板', width: 160, align: 'center', fixed: 'right'},
{field: 'name', title: '{:lang("标签名称")}', minWidth: 220,},
{field: 'create_time', title: '{:lang("创建时间")}', width: 170, align: 'center'},
{toolbar: '#SelectToolbar', title: '{:lang("操作面板")}', width: 160, align: 'center', fixed: 'right'},
]]
}).trigger('tool', function (item) {
let attr = ['商品标签', item.data.id, item.data.name];
let attr = ['{:lang("商品标签")}', item.data.id, item.data.name];
window.setItemValue(item.data, attr.join('#'));
$.msg.closeThisModal(this);
});
@ -24,8 +24,8 @@
<!-- 操作工具条模板 -->
<script type="text/html" id="SelectToolbar">
{{# if (typeof checkItemValue !== 'function' || checkItemValue(d.id)){ }}
<a class="layui-btn layui-btn-sm" lay-event="select"> </a>
<a class="layui-btn layui-btn-sm" lay-event="select">{:lang('选 择')}</a>
{{# }else{ }}
<a class="layui-btn layui-btn-sm layui-btn-disabled"> </a>
<a class="layui-btn layui-btn-sm layui-btn-disabled">{:lang('已 选')}</a>
{{# } }}
</script>

View File

@ -12,13 +12,13 @@
// {checkbox: true},
{field: 'id', hide: true},
{field: 'sort', hide: true},
{field: 'cover', title: '商品封面', width: 80, align: 'center', templet: '<div>{{-showTableImage(d.cover,false,"sm")}}</div>'},
{field: 'name', title: '商品名称', templet: "<div>商品名称:{{d.name}}<br>商品编号:<b class='color-blue'>{{d.code}}</b></div>"},
{field: 'create_time', title: '创建时间', width: 210, templet: "<div>更新:{{d.update_time}}<br>创建:{{d.create_time}}</div>"},
{toolbar: '#SelectToolbar', title: '操作面板', width: 80, align: 'center', fixed: 'right'},
{field: 'cover', title: '{:lang("商品封面")}', width: 80, align: 'center', templet: '<div>{{-showTableImage(d.cover,false,"sm")}}</div>'},
{field: 'name', title: '{:lang("商品名称")}', templet: '<div>{:lang("商品名称")}{{d.name}}<br>{:lang("商品编号")}<b class=\'color-blue\'>{{d.code}}</b></div>'},
{field: 'create_time', title: '{:lang("创建时间")}', width: 210, templet: '<div>{:lang("更新")}{{d.update_time}}<br>{:lang("创建")}{{d.create_time}}</div>'},
{toolbar: '#SelectToolbar', title: '{:lang("操作面板")}', width: 80, align: 'center', fixed: 'right'},
]]
}).trigger('tool', function (item) {
let attr = ['商品详情', item.data.code, item.data.name];
let attr = ['{:lang("商品详情")}', item.data.code, item.data.name];
window.setItemValue(item.data, attr.join('#'));
$.msg.closeThisModal(this);
});
@ -28,8 +28,8 @@
<!-- 操作工具条模板 -->
<script type="text/html" id="SelectToolbar">
{{# if (typeof checkItemValue !== 'function' || checkItemValue(d.id)){ }}
<a class="layui-btn layui-btn-sm" lay-event="select"> </a>
<a class="layui-btn layui-btn-sm" lay-event="select">{:lang('选 择')}</a>
{{# }else{ }}
<a class="layui-btn layui-btn-sm layui-btn-disabled"> </a>
<a class="layui-btn layui-btn-sm layui-btn-disabled">{:lang('已 选')}</a>
{{# } }}
</script>

View File

@ -3,21 +3,21 @@
<form action="{:sysuri()}" autocomplete="off" data-table-id="GoodsTableSelect" class="layui-form layui-form-pane form-search" method="get" onsubmit="return false">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">商品名称</label>
<label class="layui-form-label">{:lang('商品名称')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="name" placeholder="请输入商品名称或编号" value="{$get.name|default=''}">
<input class="layui-input" name="name" placeholder="{:lang('请输入商品名称或编号')}" value="{$get.name|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">创建时间</label>
<label class="layui-form-label">{:lang('创建时间')}</label>
<div class="layui-input-inline">
<input class="layui-input" data-date-range name="create_time" placeholder="请选择创建时间" value="{$get.create_time|default=''}">
<input class="layui-input" data-date-range name="create_time" placeholder="{:lang('请选择创建时间')}" value="{$get.create_time|default=''}">
</div>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
</div>
</form>

View File

@ -2,17 +2,17 @@
<div class="layui-card-body ta-pl-40">
<div class="layui-form-item relative">
<span class="help-label"><b>商品编号</b>Goods Code</span>
<span class="help-label"><b>{:lang('商品编号')}</b>Goods Code</span>
<div class="layui-input layui-bg-gray">{$vo.code|default=''}</div>
</div>
<div class="layui-form-item relative">
<span class="help-label"><b>商品名称</b>Goods Name</span>
<span class="help-label"><b>{:lang('商品名称')}</b>Goods Name</span>
<div class="layui-input layui-bg-gray">{$vo.name|default=''}</div>
</div>
<div class="layui-form-item relative">
<span class="help-label"><b>库存数据</b>Goods Stock Data</span>
<span class="help-label"><b>{:lang('库存数据')}</b>Goods Stock Data</span>
<table class="layui-table border-0 ta-m-0" lay-skin="nob">
<colgroup>
<col style="width:auto">
@ -26,14 +26,14 @@
</colgroup>
<thead>
<tr class="layui-bg-cyan notselect">
<th class="text-left nowrap">商品规格</th>
<th class="text-center nowrap">市场价格</th>
<th class="text-center nowrap">销售价格</th>
<th class="text-center nowrap">库存统计</th>
<th class="text-center nowrap">总销统计</th>
<th class="text-center nowrap">库存剩余</th>
<th class="text-center nowrap pointer" data-batchset data-tips-text="批量设置库存">
<i class="layui-icon font-s10" style="color:#FFF">&#xe63c;</i> 入库数量
<th class="text-left nowrap">{:lang('商品规格')}</th>
<th class="text-center nowrap">{:lang('市场价格')}</th>
<th class="text-center nowrap">{:lang('销售价格')}</th>
<th class="text-center nowrap">{:lang('库存统计')}</th>
<th class="text-center nowrap">{:lang('总销统计')}</th>
<th class="text-center nowrap">{:lang('库存剩余')}</th>
<th class="text-center nowrap pointer" data-batchset data-tips-text="{:lang('批量设置库存')}">
<i class="layui-icon font-s10" style="color:#FFF">&#xe63c;</i> {:lang('入库数量')}
</th>
<th class="ta-p-0"></th>
</tr>
@ -65,7 +65,7 @@
<input name="ghash[]" type="hidden" value="{$goods.ghash|default=''}">
<label class="relative flex flex-align-center">
<input class="layui-input text-center border-0 flex-1" type="number" min="0" data-blur-number="0" maxlength="20" name="gstock[]" value="0">
<span class="layui-bg-gray ta-pl-5 ta-pr-5"></span>
<span class="layui-bg-gray ta-pl-5 ta-pr-5">{:lang('')}</span>
</label>
</td>
</tr>
@ -79,15 +79,15 @@
<div class="hr-line-dashed"></div>
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>确定入库</button>
<button class="layui-btn layui-btn-danger" data-close data-confirm="确定要取消入库吗?" type='button'>取消入库</button>
<button class="layui-btn" type='submit'>{:lang('确定入库')}</button>
<button class="layui-btn layui-btn-danger" data-close data-confirm="{:lang('确定要取消入库吗?')}" type='button'>{:lang('取消入库')}</button>
</div>
</form>
<script>
$('[data-batchset]').on('click', function () {
layer.prompt({
title: '请输入库存数量【 取值范围1 - 999999 】',
title: '{:lang("请输入库存数量【 取值范围1 - 999999 】")}',
formType: 0, value: 1, success: function ($ele) {
$ele.find('.layui-layer-input').attr({'data-value-min': 1, 'data-value-max': 999999, 'data-blur-number': 0});
}

View File

@ -2,7 +2,7 @@
{block name="button"}
<!--{if auth("clean")}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-queue='{:url("clean")}'>订单自动处理</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-queue='{:url("clean")}'>{:lang('订单自动处理')}</button>
<!--{/if}-->
{/block}
@ -37,74 +37,74 @@
$(function () {
let ostatus = ['已取消', '预订单', '待支付', '待审核', '待发货', '已发货', '已收货', '已评论'];
let ostatus = ['{:lang("已取消")}', '{:lang("预订单")}', '{:lang("待支付")}', '{:lang("待审核")}', '{:lang("待发货")}', '{:lang("已发货")}', '{:lang("已收货")}', '{:lang("已评论")}'];
let ostyles = ['layui-bg-gray', 'layui-bg-red', 'layui-bg-orange', 'layui-bg-black', 'layui-bg-blue', 'layui-bg-blue', 'layui-bg-green', 'layui-bg-green'];
let rstatus = ['未售后', '预订单', '待审核', '待退货', '已退货', '待退款', '已退货', '已完成'];
let rstatus = ['{:lang("未售后")}', '{:lang("预订单")}', '{:lang("待审核")}', '{:lang("待退货")}', '{:lang("已退货")}', '{:lang("待退款")}', '{:lang("已退货")}', '{:lang("已完成")}'];
let rstyles = ['layui-bg-gray', 'layui-bg-gray', 'layui-bg-blue', 'layui-bg-blue', 'layui-bg-blue', 'layui-bg-blue', 'layui-bg-blue', 'layui-bg-green'];
$('#OrderTable').layTable({
even: true, height: 'full', sort: {field: 'id', type: 'desc'},
cols: [[
{field: 'headimg', title: '头 像', width: 90, align: 'center', templet: '<div>{{-showTableImage(d.user.headimg,true,"md")}}</div>'},
{field: 'headimg', title: '{:lang("头 像")}', width: 90, align: 'center', templet: '<div>{{-showTableImage(d.user.headimg,true,"md")}}</div>'},
{
title: '会员用户', width: 170, templet: function (d) {
title: '{:lang("会员用户")}', width: 170, templet: function (d) {
let tpls = [];
if (d.user) {
tpls.push('<div>用户昵称:{{d.user.nickname||d.user.username||"-"}}</div>');
tpls.push('<div>用户手机:<b class="font-code">{{d.user.phone}}</b></div>');
tpls.push('<div>' + '{:lang("用户昵称")}' + '{{d.user.nickname||d.user.username||"-"}}</div>');
tpls.push('<div>' + '{:lang("用户手机")}' + '<b class="font-code">{{d.user.phone}}</b></div>');
} else {
tpls.push('<div class="color-desc ta-pt-10">无用户账号</div>')
tpls.push('<div class="color-desc ta-pt-10">' + '{:lang("无用户账号")}' + '</div>')
}
return laytpl("<div class='nowrap ta-pt-10'>" + tpls.join('') + "</div>").render(d);
}
},
{
title: '推广用户', width: 170, templet: function (d) {
title: '{:lang("推广用户")}', width: 170, templet: function (d) {
let tpls = [];
if (d.from) {
tpls.push('<div>用户昵称:{{d.from.nickname||d.from.username||"-"}}</div>');
tpls.push('<div>用户手机:<b class="font-code">{{d.from.phone}}</b></div>');
tpls.push('<div>' + '{:lang("用户昵称")}' + '{{d.from.nickname||d.from.username||"-"}}</div>');
tpls.push('<div>' + '{:lang("用户手机")}' + '<b class="font-code">{{d.from.phone}}</b></div>');
} else {
tpls.push('<div class="color-desc ta-pt-10">无推荐人</div>')
tpls.push('<div class="color-desc ta-pt-10">' + '{:lang("无推荐人")}' + '</div>')
}
return laytpl("<div class='nowrap ta-pt-10'>" + tpls.join('') + "</div>").render(d);
}
},
{
title: '订单信息', minWidth: 250, templet: function (d) {
title: '{:lang("订单信息")}', minWidth: 250, templet: function (d) {
d.showPayments = "{:url('plugin-payment/record/index')}"
let tpls = ' <a data-tips-text="查看支付信息" data-title="查看支付信息" class="layui-icon layui-icon-rmb font-s12 ta-mr-5" data-width="999px" data-close-refresh="OrderTable" data-modal="{{d.showPayments}}?orderinfo={{d.order_no}}"></a>';
tpls += '订单号 <b class="font-code">{{d.order_no}}</b>';
let tpls = ' <a data-tips-text="' + '{:lang("查看支付信息")}' + '" data-title="' + '{:lang("查看支付信息")}' + '" class="layui-icon layui-icon-rmb font-s12 ta-mr-5" data-width="999px" data-close-refresh="OrderTable" data-modal="{{d.showPayments}}?orderinfo={{d.order_no}}"></a>';
tpls += '{:lang("订单号")} <b class="font-code">{{d.order_no}}</b>';
if (d.amount_real > 0) {
if (d.payment_status > 0) {
tpls += '<br>已支付 <b class="font-code" data-width="1024px" data-title="查看支付详情">{{str2num(d.amount_real)}}</b> 元';
tpls += '<br>' + '{:lang("已支付")}' + ' <b class="font-code" data-width="1024px" data-title="' + '{:lang("查看支付详情")}' + '">{{str2num(d.amount_real)}}</b> {:lang("")}';
} else {
tpls += '<br>需支付 <b class="font-code" data-width="1024px" data-title="查看支付详情">{{str2num(d.amount_real)}}</b> 元';
tpls += '<br>' + '{:lang("需支付")}' + ' <b class="font-code" data-width="1024px" data-title="' + '{:lang("查看支付详情")}' + '">{{str2num(d.amount_real)}}</b> {:lang("")}';
}
} else {
tpls += '<br>无需支付';
tpls += '<br>' + '{:lang("无需支付")}';
}
if (d.amount_express > 0) {
tpls += ' ( 随减 <b class="font-code">{{str2num(d.amount_reduct)}}</b> 元,含邮费 <b class="font-code">{{str2num(d.amount_express)}}</b> 元)';
tpls += ' ( {:lang("随减")} <b class="font-code">{{str2num(d.amount_reduct)}}</b> {:lang("")}{:lang("含邮费")} <b class="font-code">{{str2num(d.amount_express)}}</b> {:lang("")})';
} else {
tpls += ' ( 随减 <b class="font-code">{{str2num(d.amount_reduct)}}</b> 元,包邮免费 )';
tpls += ' ( {:lang("随减")} <b class="font-code">{{str2num(d.amount_reduct)}}</b> {:lang("")}{:lang("包邮免费")} )';
}
tpls += '<br>'
if (d.amount_balance > 0) {
tpls += "余额 " + d.amount_balance + " 元,"
tpls += '{:lang("余额")} ' + d.amount_balance + ' {:lang("元")}'
} else {
tpls += '未使用余额,'
tpls += '{:lang("未使用余额")}'
}
if (d.amount_integral > 0) {
tpls += "积分 " + d.amount_balance + ""
tpls += '{:lang("积分")} ' + d.amount_balance + ''
} else {
tpls += '未使用积分,'
tpls += '{:lang("未使用积分")}'
}
if (d.coupon_code) {
tpls += "优惠券 " + d.coupon_amount + "元,"
tpls += '{:lang("优惠券")} ' + d.coupon_amount + '{:lang("元")}'
} else {
tpls += '未使用优惠券。'
tpls += '{:lang("未使用优惠券")}。'
}
let status = laytpl('<span class="layui-badge layui-badge-middle flex-center {{d.style}}" >{{d.status}}</span>').render({
@ -117,7 +117,7 @@
}
},
{
title: '商品详情', minWidth: 220, templet: function (d) {
title: '{:lang("商品详情")}', minWidth: 220, templet: function (d) {
let tpls = [];
d.items.map(function (v) {
tpls.push(laytpl(
@ -129,7 +129,7 @@
' <div>' +
' <span>{{d.gname}}</span>' +
' <span class="ta-pl-5 color-desc">{{str2name(d.gspec)}}</span><br>' +
' <span>{{d.stock_sales}}件 x {{str2num(d.price_selling)}}元/件,计 {{str2num(d.total_price_selling)}}元</span> ' +
' <span>{{d.stock_sales}}' + '{:lang("")}' + ' x {{str2num(d.price_selling)}}' + '{:lang("元/件")}' + '' + '{:lang("")}' + ' {{str2num(d.total_price_selling)}}' + '{:lang("")}' + '</span> ' +
' </div>' +
' </div>' +
'</div>'
@ -139,24 +139,24 @@
}
},
{
title: '收货地址', templet: function (d) {
title: '{:lang("收货地址")}', templet: function (d) {
if (d.address) {
let tpls = [];
if (d.address.status > 1) {
tpls.push('<b>发货物流:</b><span class="ta-mr-5">{{d.company_name}}</span><span class="color-blue font-code">{{d.express_code}}</span>');
tpls.push('<b>' + '{:lang("发货物流")}' + '</b><span class="ta-mr-5">{{d.company_name}}</span><span class="color-blue font-code">{{d.express_code}}</span>');
} else {
tpls.push('<b>发货物流:</b><span class="color-desc">未发货</span>');
tpls.push('<b>' + '{:lang("发货物流")}' + '</b><span class="color-desc">' + '{:lang("未发货")}' + '</span>');
}
tpls.push('<b>联系方式:</b><span class="ta-mr-5">{{d.user_name}}</span><span class="color-blue font-code">{{d.user_phone}}</span>');
tpls.push('<b>收货地址:</b>{{d.region_prov}} {{d.region_city}} {{d.region_area}} {{d.region_addr}}');
tpls.push('<b>' + '{:lang("联系方式")}' + '</b><span class="ta-mr-5">{{d.user_name}}</span><span class="color-blue font-code">{{d.user_phone}}</span>');
tpls.push('<b>' + '{:lang("收货地址")}' + '</b>{{d.region_prov}} {{d.region_city}} {{d.region_area}} {{d.region_addr}}');
return laytpl(tpls.join('<br>')).render(d.address);
} else {
return '<div class="ta-pt-20 color-desc">无收货信息</div>';
return '<div class="ta-pt-20 color-desc">' + '{:lang("无收货信息")}' + '</div>';
}
}
},
{field: 'id', sort: true, title: '创建时间', minWidth: 170, templet: "下单时间:{{d.create_time}}<br><div>支付时间:{{d.payment_time}}<br>签收时间:{{d.confirm_time}}</div>"},
{toolbar: '#toolbar', hide: true, title: '操作面板', width: 120, align: 'center', fixed: 'right'},
{field: 'id', sort: true, title: '{:lang("创建时间")}', minWidth: 170, templet: '{:lang("下单时间")}{{d.create_time}}<br><div>{:lang("支付时间")}{{d.payment_time}}<br>{:lang("签收时间")}{{d.confirm_time}}</div>'},
{toolbar: '#toolbar', hide: true, title: '{:lang("操作面板")}', width: 120, align: 'center', fixed: 'right'},
]]
});
});
@ -166,7 +166,7 @@
<!-- 操控面板的模板 -->
<script type="text/html" id="toolbar">
<!--{if auth('remove')}-->
<a class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="确定要删除此商品吗?" data-action="{:url('remove')}" data-value="code#{{d.code}}"> </a>
<a class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="{:lang('确定要删除吗?')}" data-action="{:url('remove')}" data-value="id#{{d.id}}">{:lang('删 除')}</a>
<!--{/if}-->
</script>
{/block}

View File

@ -1,39 +1,39 @@
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-form-pane form-search" method="get" onsubmit="return false">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">会员用户</label>
<label class="layui-form-label">{:lang('会员用户')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="user_keys" placeholder="请输入手机或昵称" value="{$get.user_keys|default=''}">
<input class="layui-input" name="user_keys" placeholder="{:lang('请输入手机或昵称')}" value="{$get.user_keys|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">推广用户</label>
<label class="layui-form-label">{:lang('推广用户')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="from_keys" placeholder="请输入手机或昵称" value="{$get.from_keys|default=''}">
<input class="layui-input" name="from_keys" placeholder="{:lang('请输入手机或昵称')}" value="{$get.from_keys|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">订单单号</label>
<label class="layui-form-label">{:lang('订单单号')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="order_no" placeholder="请输入订单单号" value="{$get.order_no|default=''}">
<input class="layui-input" name="order_no" placeholder="{:lang('请输入订单单号')}" value="{$get.order_no|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">发货单号</label>
<label class="layui-form-label">{:lang('发货单号')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="delivery_express_code" placeholder="请输入发货单号" value="{$get.delivery_express_code|default=''}">
<input class="layui-input" name="delivery_express_code" placeholder="{:lang('请输入发货单号')}" value="{$get.delivery_express_code|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">订单状态</label>
<label class="layui-form-label">{:lang('订单状态')}</label>
<label class="layui-input-inline">
<select class="layui-select" name="status">
<option value=''>- 全部订单 -</option>
{foreach ['1'=>'预购订单','2'=>'等待支付','3'=>'等待审核','4'=>'等待发货','5'=>'已经发货','6'=>'已经完成','7'=>'已经评论','0'=>'已经取消'] as $k=>$v}
<option value=''>{:lang('- 全部订单 -')}</option>
{foreach ['1'=>lang('预购订单'),'2'=>lang('等待支付'),'3'=>lang('等待审核'),'4'=>lang('等待发货'),'5'=>lang('已经发货'),'6'=>lang('已经完成'),'7'=>lang('已经评论'),'0'=>lang('已经取消')] as $k=>$v}
{if input('status') eq $k.''}
<option selected value="{$k}">{$v}</option>
{else}
@ -44,10 +44,10 @@
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">售后状态</label>
<label class="layui-form-label">{:lang('售后状态')}</label>
<label class="layui-input-inline">
<select class="layui-select" name="refund_status">
<option value=''>- 全部 -</option>
<option value=''>{:lang('- 全部 -')}</option>
{foreach $refunds as $k=>$v}
{if input('refund_status') eq $k.''}
<option selected value="{$k}">{$v}</option>
@ -59,10 +59,10 @@
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">支付方式</label>
<label class="layui-form-label">{:lang('支付方式')}</label>
<label class="layui-input-inline">
<select class="layui-select" name="payment_type">
<option value=''>-- 全部 --</option>
<option value=''>{:lang('-- 全部 --')}</option>
{foreach $payments as $k=>$v}
{if input('payment_type') eq $k.''}
<option selected value="{$k}">{$v.name}</option>
@ -74,30 +74,30 @@
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">下单时间</label>
<label class="layui-form-label">{:lang('下单时间')}</label>
<label class="layui-input-inline">
<input class="layui-input" data-date-range name="create_time" placeholder="请选择下单时间" value="{$get.create_time|default=''}">
<input class="layui-input" data-date-range name="create_time" placeholder="{:lang('请选择下单时间')}" value="{$get.create_time|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">支付时间</label>
<label class="layui-form-label">{:lang('支付时间')}</label>
<label class="layui-input-inline">
<input class="layui-input" data-date-range name="payment_time" placeholder="请选择支付时间" value="{$get.payment_time|default=''}">
<input class="layui-input" data-date-range name="payment_time" placeholder="{:lang('请选择支付时间')}" value="{$get.payment_time|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">收货信息</label>
<label class="layui-form-label">{:lang('收货信息')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="address" placeholder="请输入收货信息" value="{$get.address|default=''}">
<input class="layui-input" name="address" placeholder="{:lang('请输入收货信息')}" value="{$get.address|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary" type="submit"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary" type="submit"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
<button class="layui-btn layui-btn-primary" data-form-export="{:url('index')}?type={$type|default=''}" type="button">
<i class="layui-icon layui-icon-export"></i>
<i class="layui-icon layui-icon-export"></i> {:lang('导 出')}
</button>
</div>
</form>
@ -110,21 +110,21 @@
order.order_no,
order.user.phone,
order.user.username || order.user.nickname || '',
order.delivery_type ? '虚拟商品' : '实物商品',
order.delivery_type ? '{:lang("虚拟商品")}' : '{:lang("实物商品")}',
order.payment_trade || '',
order.payment_name || order.payment_type || '',
order.payment_status ? '已支付' : '未支付',
order.payment_status ? '{:lang("已支付")}' : '{:lang("未支付")}',
order.payment_amount || '0.00',
order.payment_time || '',
]);
});
// 设置表头内容
items.unshift(['订单号', '用户手机', '用户姓名', '订单类型', '支付单号', '支付方式', '支付状态', '支付金额', '支付时间']);
items.unshift(['{:lang("订单号")}', '{:lang("用户手机")}', '{:lang("用户姓名")}', '{:lang("订单类型")}', '{:lang("支付单号")}', '{:lang("支付方式")}', '{:lang("支付状态")}', '{:lang("支付金额")}', '{:lang("支付时间")}']);
// 应用表格样式
return this.withStyle(items, {I: 120});
}, '用户订单记录' + layui.util.toDateString(Date.now(), '_yyyyMMdd_HHmmss'));
}, '{:lang("用户订单记录")}' + layui.util.toDateString(Date.now(), '_yyyyMMdd_HHmmss'));
});
</script>

View File

@ -1,8 +1,8 @@
{extend name="main"}
{block name="button"}
<button data-target-submit class='layui-btn layui-btn-sm'>保存数据</button>
<button data-target-backup class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="确认要取消编辑吗?">取消编辑</button>
<button data-target-submit class='layui-btn layui-btn-sm'>{:lang('保存数据')}</button>
<button data-target-backup class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="{:lang('确认要取消编辑吗?')}">{:lang('取消编辑')}</button>
{/block}
{block name="content"}
@ -11,16 +11,16 @@
<div class="layui-card-body ta-pl-40">
<fieldset class="layui-form-item">
<legend class="layui-badge text-left think-bg-violet">用户信息</legend>
<legend class="layui-badge text-left think-bg-violet">{:lang('用户信息')}</legend>
<div class="flex">
<div class="headimg" style="width:138px;height:138px" data-tips-image data-lazy-src="{$vo.user.headimg|default='__ROOT__/static/theme/img/headimg.png'}"></div>
<div class="flex-1 ta-ml-15">
<label class="layui-form-item relative block">
<span class="help-label"><b>用户昵称</b>Nickname</span>
<span class="help-label"><b>{:lang('用户昵称')}</b>Nickname</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.user.nickname|default=''}">
</label>
<label class="relative block">
<span class="help-label"><b>用户账号</b>Phone</span>
<span class="help-label"><b>{:lang('用户账号')}</b>Phone</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.user.phone|default=''}">
</label>
</div>
@ -28,28 +28,28 @@
</fieldset>
<fieldset class="layui-form-item">
<legend class="layui-badge text-left think-bg-violet">订单信息</legend>
<legend class="layui-badge text-left think-bg-violet">{:lang('订单信息')}</legend>
<div class="layui-form-item flex">
<label class="ta-mr-10">
<span class="help-label"><b>订单单号</b>OrderCode</span>
<span class="help-label"><b>{:lang('订单单号')}</b>OrderCode</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.order_no|default=''}"/>
</label>
<label class="ta-mr-10">
<span class="help-label"><b>支付金额</b>Amount</span>
<span class="help-label"><b>{:lang('支付金额')}</b>Amount</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.orderinfo.amount_real|default=''}"/>
</label>
<label class="ta-mr-10">
<span class="help-label"><b>余额消费</b>Balance</span>
<span class="help-label"><b>{:lang('余额消费')}</b>Balance</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.orderinfo.amount_balance|default=''}"/>
</label>
<label class="ta-mr-10">
<span class="help-label"><b>积分消费</b>Integral</span>
<span class="help-label"><b>{:lang('积分消费')}</b>Integral</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.orderinfo.amount_integral|default=''}"/>
</label>
</div>
{notempty name='vo.orderinfo.items'}
<div class="layui-form-item">
<span class="help-label"><b>商品列表</b>Images</span>
<span class="help-label"><b>{:lang('商品列表')}</b>Images</span>
<div class="layui-textarea ta-p-10 flex flex-wrap" style="min-height:auto;padding-bottom:0!important;">
{foreach $vo.orderinfo.items as $v}
<div class="flex layui-bg-gray ta-p-10 border-radius-5 ta-mr-10 ta-mb-10" style="min-width:400px">
@ -60,9 +60,9 @@
</div>
<div>
<div class="flex-y">
<div class="text-right">售价 {$v.price_selling} </div>
<div class="text-right">{:lang('售价')} {$v.price_selling} {:lang('')}</div>
<div class="text-right">x {$v.stock_sales} {$v.gunit}</div>
<div class="text-right">共计 <b>{$v.total_price_selling}</b> </div>
<div class="text-right">{:lang('共计')} <b>{$v.total_price_selling}</b> {:lang('')}</div>
</div>
</div>
</div>
@ -74,71 +74,71 @@
<fieldset class="layui-form-item">
<legend class="text-left">
<span class="layui-badge think-bg-purple">售后信息</span>
<span class="layui-badge think-bg-purple">{:lang('售后信息')}</span>
<!-- 流程状态(0已取消,1预订单,2待审核,3待退货,4已退货,5待退款,6已退款,7已完成)-->
{if $vo.status eq 0}
<span class="layui-badge think-bg-gray">已取消</span>
<span class="layui-badge think-bg-gray">{:lang('已取消')}</span>
{elseif $vo.status eq 2}
<span class="layui-badge think-bg-blue">待审核</span>
<span class="layui-badge think-bg-blue">{:lang('待审核')}</span>
{elseif $vo.status eq 3}
<span class="layui-badge think-bg-blue">待退货</span>
<span class="layui-badge think-bg-blue">{:lang('待退货')}</span>
{elseif $vo.status eq 4}
<span class="layui-badge think-bg-blue">已退货</span>
<span class="layui-badge think-bg-blue">{:lang('已退货')}</span>
{elseif $vo.status eq 5}
<span class="layui-badge think-bg-blue">待退款</span>
<span class="layui-badge think-bg-blue">{:lang('待退款')}</span>
{elseif $vo.status eq 6}
<span class="layui-badge think-bg-green">已退款</span>
<span class="layui-badge think-bg-green">{:lang('已退款')}</span>
{elseif $vo.status eq 7}
<span class="layui-badge think-bg-green">已完成</span>
<span class="layui-badge think-bg-green">{:lang('已完成')}</span>
{/if}
</legend>
<div class="layui-form-item flex flex-wrap">
<label class="ta-mr-10">
<span class="help-label"><b>售后单号</b>Refund Code</span>
<span class="help-label"><b>{:lang('售后单号')}</b>Refund Code</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.code|default=''}"/>
</label>
<label class="ta-mr-10">
<span class="help-label"><b>售后类型</b>Refund Type</span>
<span class="help-label"><b>{:lang('售后类型')}</b>Refund Type</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.typename|default=''}"/>
</label>
<label class="ta-mr-10">
<span class="help-label"><b>售后原因</b>Refund Reason</span>
<span class="help-label"><b>{:lang('售后原因')}</b>Refund Reason</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.reasonname|default=''}"/>
</label>
{notempty name='vo.phone'}
<label class="ta-mr-10">
<span class="help-label"><b>联系电话</b>Concat Phone</span>
<span class="help-label"><b>{:lang('联系电话')}</b>Concat Phone</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.phone|default=''}"/>
</label>
{/notempty}
<label class="ta-mr-10">
<span class="help-label"><b>申请退款</b>Refund Amount</span>
<span class="help-label"><b>{:lang('申请退款')}</b>Refund Amount</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.amount|default=''}"/>
</label>
</div>
<label class="layui-form-item block">
<span class="help-label"><b>申请说明</b>Refund Description</span>
<span class="help-label"><b>{:lang('申请说明')}</b>Refund Description</span>
<textarea class="layui-textarea layui-bg-gray" readonly>{$vo.content|default=''}</textarea>
</label>
<div class="layui-form-item flex flex-wrap">
<label class="ta-mr-10">
<span class="help-label"><b>退货快递</b>Express Name</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.express_name|default='未填写'}"/>
<span class="help-label"><b>{:lang('退货快递')}</b>Express Name</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.express_name|default='{:lang("未填写")}'}"/>
</label>
<label class="ta-mr-10">
<span class="help-label"><b>退货单号</b>Express Code</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.express_no|default='未填写'}"/>
<span class="help-label"><b>{:lang('退货单号')}</b>Express Code</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.express_no|default='{:lang("未填写")}'}"/>
</label>
<div class="ta-pt-25">
<a class="layui-btn" data-delivery-code="{$vo.express_code}" data-delivery-number="{$vo.express_no}">查询快递</a>
<a class="layui-btn" data-delivery-code="{$vo.express_code}" data-delivery-number="{$vo.express_no}">{:lang('查询快递')}</a>
</div>
</div>
{notempty name='vo.images'}
<div class="layui-form-item">
<span class="help-label"><b>说明图片</b>Refund Images</span>
<span class="help-label"><b>{:lang('说明图片')}</b>Refund Images</span>
<div class="layui-textarea layui-bg-gray help-images upload-image-mdbox">
{foreach $vo.images as $img}
<div data-tips-image data-lazy-src="{$img}" class="uploadimage" style="width:118px;height:118px"></div>
@ -149,17 +149,17 @@
</fieldset>
<fieldset class="layui-form-item">
<legend class="layui-badge text-left think-bg-violet">售后操作</legend>
<legend class="layui-badge text-left think-bg-violet">{:lang('售后操作')}</legend>
<div class="layui-form-item">
<span class="help-label label-required-prev"><b>审核状态</b></span>
<span class="help-label label-required-prev"><b>{:lang('审核状态')}</b></span>
<div class="layui-textarea" style="min-height:auto;padding:10px 0 13px 18px">
<!-- 流程状态(0已取消,1预订单,2待审核,3待退货,4已退货,5待退款,6已退款,7已完成) -->
{empty name='vo.status'}{assign name='vo.status' value='0'}{/empty}
{php}
if( $vo['status'] > 4 ){
$slist = [5=>'发起退款 ( 不可改金额 )',6=>'已退款 ( 不可改金额 )',7=>'完成 ( 不可改金额 )'];
$slist = [5=>lang('发起退款 ( 不可改金额 )'),6=>lang('已退款 ( 不可改金额 )'),7=>lang('完成 ( 不可改金额 )')];
} else {
$slist = [0=>'驳回',2=>'待审核',3=>'待退货', 4=>'已退货',5=>'去退款 ( 不可改金额 )'];
$slist = [0=>lang('驳回'),2=>lang('待审核'),3=>lang('待退货'), 4=>lang('已退货'),5=>lang('去退款 ( 不可改金额 )')];
}
{/php}
{foreach $slist as $k => $v}
@ -175,28 +175,28 @@
{foreach $vo.orderinfo.payments as $p}
<div class="flex">
<label class="ta-mr-10">
<span class="help-label nowrap"><b>支付单号</b>Payment Code</span>
<span class="help-label nowrap"><b>{:lang('支付单号')}</b>Payment Code</span>
<input class="layui-input layui-bg-gray" readonly value="{$p.code|default='0.00'}"/>
</label>
<label class="ta-mr-10">
<span class="help-label nowrap"><b>支付类型</b>Payment Type</span>
<span class="help-label nowrap"><b>{:lang('支付类型')}</b>Payment Type</span>
<input class="layui-input layui-bg-gray" readonly value="{$p.channel_type_name|default='0.00'}"/>
</label>
<label class="ta-mr-10">
<span class="help-label nowrap"><b>支付金额</b>Payment Amount</span>
<span class="help-label nowrap"><b>{:lang('支付金额')}</b>Payment Amount</span>
<input class="layui-input layui-bg-gray" readonly value="{$p.payment_amount|default='0.00'}"/>
</label>
<label class="ta-mr-10">
<span class="help-label nowrap"><b>平台优惠</b>Coupon Amount</span>
<span class="help-label nowrap"><b>{:lang('平台优惠')}</b>Coupon Amount</span>
<input class="layui-input layui-bg-gray" readonly value="{$p.payment_coupon|default='0.00'}"/>
</label>
<label class="ta-mr-10">
{if $p.channel_type eq 'integral'}
<span class="help-label label-required-prev nowrap"><b>已退积分</b>Refunded Integral</span>
<span class="help-label label-required-prev nowrap"><b>{:lang('已退积分')}</b>Refunded Integral</span>
{elseif $p.channel_type eq 'balance'}
<span class="help-label label-required-prev nowrap"><b>已退余额</b>Refunded Balance</span>
<span class="help-label label-required-prev nowrap"><b>{:lang('已退余额')}</b>Refunded Balance</span>
{else}
<span class="help-label label-required-prev nowrap"><b>已退金额</b>Refunded Amount</span>
<span class="help-label label-required-prev nowrap"><b>{:lang('已退金额')}</b>Refunded Amount</span>
{/if}
<input class="layui-input layui-bg-gray" readonly value="{$p.refund_amount|default='0.00'}"/>
</label>
@ -208,13 +208,13 @@
{php}$refundAmount=floatval($p['refund_amount'])>0?$p['refund_amount']:$allowAmount;{/php}
<div>
{if $p.channel_type eq 'integral'}
<span class="help-label label-required-prev nowrap"><b>退回积分</b>Refund Integral</span>
<span class="help-label label-required-prev nowrap"><b>{:lang('退回积分')}</b>Refund Integral</span>
{elseif $p.channel_type eq 'balance'}
<span class="help-label label-required-prev nowrap"><b>退回余额</b>Refund Balance</span>
<span class="help-label label-required-prev nowrap"><b>{:lang('退回余额')}</b>Refund Balance</span>
{elseif $p.channel_type eq 'coupon'}
<span class="help-label label-required-prev nowrap"><b>退回优惠券</b>Refund Coupon</span>
<span class="help-label label-required-prev nowrap"><b>{:lang('退回优惠券')}</b>Refund Coupon</span>
{else}
<span class="help-label label-required-prev nowrap"><b>退回金额</b>Refund Amount</span>
<span class="help-label label-required-prev nowrap"><b>{:lang('退回金额')}</b>Refund Amount</span>
{/if}
<input type="hidden" name="pcodes[{$p.code}]" value="{$p.channel_code}">
<input type="hidden" name="ptypes[{$p.code}]" value="{$p.channel_type}">
@ -223,9 +223,9 @@
<div class="layui-input" style="line-height:unset">
<input value="0" type="hidden" name="refunds[{$p.code}]"/>
{if empty($p.refund_status)}
<input checked value="1" type="checkbox" name="refunds[{$p.code}]" title="退回优惠券"/>
<input checked value="1" type="checkbox" name="refunds[{$p.code}]" title="{:lang('退回优惠券')}"/>
{else}
<input checked value="0" type="checkbox" readonly disabled title="已退回优惠券"/>
<input checked value="0" type="checkbox" readonly disabled title="{:lang('已退回优惠券')}"/>
{/if}
</div>
{else}
@ -243,8 +243,8 @@
</div>
<label class="layui-form-item relative block">
<span class="help-label"><b>操作描述</b></span>
<textarea class="layui-textarea" name="remark" placeholder="请输入操作描述">{$vo.remark|default='售后服务'}</textarea>
<span class="help-label"><b>{:lang('操作描述')}</b></span>
<textarea class="layui-textarea" name="remark" placeholder="{:lang('请输入操作描述')}">{$vo.remark|default='{:lang("售后服务")}'}</textarea>
</label>
</fieldset>
@ -253,8 +253,8 @@
{notempty name='vo.id'}<input name='id' type='hidden' value='{$vo.id}'>{/notempty}
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存修改</button>
<button class="layui-btn layui-btn-danger" data-target-backup type='button'>取消编辑</button>
<button class="layui-btn" type='submit'>{:lang('保存修改')}</button>
<button class="layui-btn layui-btn-danger" data-target-backup type='button'>{:lang('取消编辑')}</button>
</div>
</div>
</form>
@ -265,7 +265,7 @@
$(function () {
$('[data-delivery-code]').on('click', function () {
let code = this.dataset.deliveryCode || '', number = this.dataset.deliveryNumber || ''
$.form.modal('{:url("shop.sender/query")}', {code: code, number: number}, '快递追踪查询')
$.form.modal('{:url("shop.sender/query")}', {code: code, number: number}, '{:lang("快递追踪查询")}')
});
})
</script>

View File

@ -33,48 +33,48 @@
$('#RefundTable').layTable({
even: true, height: 'full', sort: {field: 'id', type: 'desc'}, cellExpandedMode: 'tips',
cols: [[
{field: 'headimg', title: '头 像', width: 100, align: 'center', templet: '<div>{{-showTableImage(d.user.headimg,true,"md")}}</div>'},
{field: 'headimg', title: '{:lang("头 像")}', width: 100, align: 'center', templet: '<div>{{-showTableImage(d.user.headimg,true,"md")}}</div>'},
{
title: '会员用户', width: 200, templet: function (d) {
title: '{:lang("会员用户")}', width: 200, templet: function (d) {
let tpls = [];
if (d.user) {
tpls.push('用户昵称:{{d.user.nickname||d.user.username||"-"}}');
tpls.push('用户手机:<b class="font-code">{{d.user.phone}}</b>');
tpls.push('用户编号:<b class="font-code">{{d.user.code}}</b>');
tpls.push('{:lang("用户昵称")}{{d.user.nickname||d.user.username||"-"}}');
tpls.push('{:lang("用户手机")}<b class="font-code">{{d.user.phone}}</b>');
tpls.push('{:lang("用户编号")}<b class="font-code">{{d.user.code}}</b>');
} else {
tpls.push('<div class="color-desc ta-pt-10">无用户账号</div>')
tpls.push('<div class="color-desc ta-pt-10">' + '{:lang("无用户账号")}' + '</div>')
}
return laytpl("<div class='nowrap'>" + tpls.join('<br>') + "</div>").render(d);
}
},
{
title: '售后信息', templet: (d) => {
title: '{:lang("售后信息")}', templet: (d) => {
let style = ['grey', 'grey', 'blue', 'blue', 'blue', 'blue', 'blue', 'green', 'green'][d.status] || 'blue';
let status = ['已取消', '预订单', '待审核', '待退货', '已退货', '待退款', '已退款', '已完成'][d.status] || '未知';
let status = ['{:lang("已取消")}', '{:lang("预订单")}', '{:lang("待审核")}', '{:lang("待退货")}', '{:lang("已退货")}', '{:lang("待退款")}', '{:lang("已退款")}', '{:lang("已完成")}'][d.status] || '{:lang("未知")}';
let left = '<span class="layui-badge layui-badge-middle flex-center layui-bg-' + style + '" style="height:4.5em">' + status + '</span>';
let tpls = [];
tpls.push('售后单 <b class="font-code">{{d.code||"-"}}</b>');
tpls.push('{{d.typename}}申请退款 <b class="font-code">{{str2num(d.amount)}}</b> 元');
tpls.push('退回 <b>{{Number(d.payment_amount)}}</b> 元,退回 <b>{{Number(d.balance_amount)}}</b> 余额,退回 <b>{{Number(d.integral_amount)}}</b> 积分')
tpls.push('{:lang("售后单")} <b class="font-code">{{d.code||"-"}}</b>');
tpls.push('{{d.typename}}' + '{:lang("申请退款")}' + ' <b class="font-code">{{str2num(d.amount)}}</b> {:lang("")}');
tpls.push('{:lang("退回")} <b>{{Number(d.payment_amount)}}</b> {:lang("")}' + '{:lang("退回")}' + ' <b>{{Number(d.balance_amount)}}</b> {:lang("余额")}' + '{:lang("退回")}' + ' <b>{{Number(d.integral_amount)}}</b> {:lang("积分")}')
return laytpl('<div class="flex">' + left + "<div class='nowrap sub-strong-blue'>" + tpls.join('<br>') + "</div></div>").render(d);
}
},
{
title: '订单信息', templet: (d) => {
let ostatus = ['已取消', '预订单', '待支付', '待审核', '待发货', '已发货', '已收货', '已评论'];
title: '{:lang("订单信息")}', templet: (d) => {
let ostatus = ['{:lang("已取消")}', '{:lang("预订单")}', '{:lang("待支付")}', '{:lang("待审核")}', '{:lang("待发货")}', '{:lang("已发货")}', '{:lang("已收货")}', '{:lang("已评论")}'];
let ostyles = ['layui-bg-gray layui-border-red', 'layui-bg-red', 'layui-bg-orange', 'layui-bg-black', 'layui-bg-blue', 'layui-bg-green', 'layui-bg-green'];
let status = laytpl('<span class="layui-badge layui-badge-middle flex-center {{d.style}}" style="height:4.5em">{{d.status}}</span>').render({
status: ostatus[d.orderinfo.status], style: ostyles[d.orderinfo.status]
});
let tpls = [];
tpls.push('订单号 <b class="font-code">{{d.order_no||"-"}}</b>');
tpls.push('共支付 <b class="font-code">{{str2num(d.orderinfo.amount_real)}}</b> 元,共 {{d.orderinfo.number_goods}} 件商品');
tpls.push('余额支付 <b>{{Number(d.orderinfo.amount_balance)}}</b> 元,使用 <b>{{Number(d.orderinfo.amount_integral)}}</b> 积分抵扣')
tpls.push('{:lang("订单号")} <b class="font-code">{{d.order_no||"-"}}</b>');
tpls.push('{:lang("共支付")} <b class="font-code">{{str2num(d.orderinfo.amount_real)}}</b> {:lang("")}' + '{:lang("")}' + ' {{d.orderinfo.number_goods}} {:lang("件商品")}');
tpls.push('{:lang("余额支付")} <b>{{Number(d.orderinfo.amount_balance)}}</b> {:lang("")}' + '{:lang("使用")}' + ' <b>{{Number(d.orderinfo.amount_integral)}}</b> {:lang("积分抵扣")}')
return laytpl('<div class="flex">' + status + '<div class="nowrap sub-strong-blue">' + tpls.join('<br>') + '</div></div>').render(d);
}
},
{field: 'id', sort: true, title: '操作时间', minWidth: 170, templet: "<div>更新时间:{{d.update_time}}<br>下单时间:{{d.create_time}}</div>"},
{toolbar: '#RefundEdit', title: '操作面板', width: 120, align: 'center', fixed: 'right'},
{field: 'id', sort: true, title: '{:lang("操作时间")}', minWidth: 170, templet: '<div>{:lang("更新时间")}{{d.update_time}}<br>{:lang("下单时间")}{{d.create_time}}</div>'},
{toolbar: '#RefundEdit', title: '{:lang("操作面板")}', width: 120, align: 'center', fixed: 'right'},
]]
});
});
@ -84,7 +84,7 @@
<script type="text/html" id="RefundEdit">
<!--{if auth('edit')}-->
<div class="ta-p-5"></div>
<a class="layui-btn layui-btn-sm" data-open="{:url('edit')}?id={{d.id}}"> </a>
<a class="layui-btn layui-btn-sm" data-open="{:url('edit')}?id={{d.id}}">{:lang('编 辑')}</a>
<!--{/if}-->
</script>
{/block}

View File

@ -1,25 +1,25 @@
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-form-pane form-search" method="get" onsubmit="return false">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">会员用户</label>
<label class="layui-form-label">{:lang('会员用户')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="user_keys" placeholder="请输入手机或昵称" value="{$get.user_keys|default=''}">
<input class="layui-input" name="user_keys" placeholder="{:lang('请输入手机或昵称')}" value="{$get.user_keys|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">订单单号</label>
<label class="layui-form-label">{:lang('订单单号')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="order_no" placeholder="请输入订单单号" value="{$get.order_no|default=''}">
<input class="layui-input" name="order_no" placeholder="{:lang('请输入订单单号')}" value="{$get.order_no|default=''}">
</label>
</div>
<!--{if $type eq 'a' and !empty($states)}-->
<div class="layui-form-item layui-inline">
<label class="layui-form-label">售后状态</label>
<label class="layui-form-label">{:lang('售后状态')}</label>
<label class="layui-input-inline">
<select class="layui-select" name="status">
<option value=''>- 全部订记录 -</option>
<option value=''>{:lang('- 全部订记录 -')}</option>
{foreach $states as $k=>$v}
{if input('status') eq $k.''}
<option selected value="{$k}">{$v}</option>
@ -32,10 +32,10 @@
<!--{/if}-->
<div class="layui-form-item layui-inline">
<label class="layui-form-label">退货原因</label>
<label class="layui-form-label">{:lang('退货原因')}</label>
<label class="layui-input-inline">
<select class="layui-select" name="reason">
<option value=''>-- 全部 --</option>
<option value=''>{:lang('-- 全部 --')}</option>
{foreach $reasons as $k=>$v}
{if input('reason') eq $k.''}
<option selected value="{$k}">{$v}</option>
@ -47,16 +47,16 @@
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">申请时间</label>
<label class="layui-form-label">{:lang('申请时间')}</label>
<label class="layui-input-inline">
<input class="layui-input" data-date-range name="create_time" placeholder="请选择申请时间" value="{$get.create_time|default=''}">
<input class="layui-input" data-date-range name="create_time" placeholder="{:lang('请选择申请时间')}" value="{$get.create_time|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary" type="submit"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary" type="submit"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
<button class="layui-btn layui-btn-primary" data-form-export="{:url('index')}?type={$type|default=''}" type="button">
<i class="layui-icon layui-icon-export"></i>
<i class="layui-icon layui-icon-export"></i> {:lang('导 出')}
</button>
</div>
</form>
@ -69,21 +69,21 @@
order.order_no,
order.user.phone,
order.user.username || order.user.nickname || '',
order.delivery_type ? '虚拟商品' : '实物商品',
order.delivery_type ? '{:lang("虚拟商品")}' : '{:lang("实物商品")}',
order.payment_trade || '',
order.payment_name || order.payment_type || '',
order.payment_status ? '已支付' : '未支付',
order.payment_status ? '{:lang("已支付")}' : '{:lang("未支付")}',
order.payment_amount || '0.00',
order.payment_time || '',
]);
});
// 设置表头内容
items.unshift(['订单号', '用户手机', '用户姓名', '订单类型', '支付单号', '支付方式', '支付状态', '支付金额', '支付时间']);
items.unshift(['{:lang("订单号")}', '{:lang("用户手机")}', '{:lang("用户姓名")}', '{:lang("订单类型")}', '{:lang("支付单号")}', '{:lang("支付方式")}', '{:lang("支付状态")}', '{:lang("支付金额")}', '{:lang("支付时间")}']);
// 应用表格样式
return this.withStyle(items, {I: 120});
}, '用户订单记录' + layui.util.toDateString(Date.now(), '_yyyyMMdd_HHmmss'));
}, '{:lang("用户订单记录")}' + layui.util.toDateString(Date.now(), '_yyyyMMdd_HHmmss'));
});
</script>

View File

@ -3,16 +3,16 @@
<div class="layui-card-body ta-pl-40">
<fieldset class="layui-form-item">
<legend class="layui-badge text-left think-bg-violet">用户信息</legend>
<legend class="layui-badge text-left think-bg-violet">{:lang('用户信息')}</legend>
<div class="flex">
<div class="headimg" style="width:138px;height:138px" data-tips-image data-lazy-src="{$vo.user.headimg|default='__ROOT__/static/theme/img/headimg.png'}"></div>
<div class="flex-1 ta-ml-15">
<label class="layui-form-item relative block">
<span class="help-label"><b>用户昵称</b>Nickname</span>
<span class="help-label"><b>{:lang('用户昵称')}</b>Nickname</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.user.nickname|default=''}">
</label>
<label class="relative block">
<span class="help-label"><b>用户账号</b>Phone</span>
<span class="help-label"><b>{:lang('用户账号')}</b>Phone</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.user.phone|default=''}">
</label>
</div>
@ -20,7 +20,7 @@
</fieldset>
<fieldset class="layui-form-item">
<legend class="layui-badge text-left think-bg-violet">订单信息</legend>
<legend class="layui-badge text-left think-bg-violet">{:lang('订单信息')}</legend>
<div class="flex">
<div>
<div data-tips-image data-tips-hover data-lazy-src="{$vo.goods.cover|default=''}" class="uploadimage" style="width:60px;height:60px"></div>
@ -30,20 +30,20 @@
<div class="font-s12 ta-pt-5">{$vo.goods.name|default=''}</div>
</div>
<div class="layui-form-item ta-ml-15">
<div class="font-s14">订单号:{$vo.order_no|default=''}</div>
<div class="font-s14">{:lang('订单号')}{$vo.order_no|default=''}</div>
<div class="flex">
<label class="layui-input-wrap">
<span class="layui-input-prefix nowrap">支付</span>
<span class="layui-input-prefix nowrap">{:lang('支付')}</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.orderinfo.amount_real|default=''}"/>
<span class="layui-input-suffix"></span>
<span class="layui-input-suffix">{:lang('')}</span>
</label>
<label class="layui-input-wrap ta-ml-5">
<span class="layui-input-prefix nowrap">余额</span>
<span class="layui-input-prefix nowrap">{:lang('余额')}</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.orderinfo.amount_balance|default=''}"/>
<span class="layui-input-suffix"></span>
<span class="layui-input-suffix">{:lang('')}</span>
</label>
<label class="layui-input-wrap ta-ml-5">
<span class="layui-input-prefix nowrap">积分</span>
<span class="layui-input-prefix nowrap">{:lang('积分')}</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.orderinfo.amount_integral|default=''}"/>
</label>
</div>
@ -53,14 +53,14 @@
<fieldset class="layui-form-item">
<legend class="layui-badge text-left think-bg-violet">评论内容</legend>
<legend class="layui-badge text-left think-bg-violet">{:lang('评论内容')}</legend>
<label class="layui-form-item block relative">
<span class="help-label label-required-prev"><b>评论分类</b></span>
<span class="help-label label-required-prev"><b>{:lang('评论分类')}</b></span>
<textarea class="layui-textarea" name="content">{$vo.content|default=''}</textarea>
</label>
<div class="layui-form-item relative block">
<span class="help-label"><b>评论图片</b></span>
<span class="help-label"><b>{:lang('评论图片')}</b></span>
{php}$images = join('|',$vo['images']??[]);{/php}
<div class="layui-textarea help-images">
<input type="hidden" name="images" value="{$images}">
@ -74,8 +74,8 @@
{notempty name = 'vo.id'}<input name='id' type='hidden' value='{$vo.id}'>{/notempty}
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存修改</button>
<button class="layui-btn layui-btn-danger" data-target-backup type='button'>取消编辑</button>
<button class="layui-btn" type='submit'>{:lang('保存修改')}</button>
<button class="layui-btn layui-btn-danger" data-target-backup type='button'>{:lang('取消编辑')}</button>
</div>
</div>
</form>

View File

@ -3,7 +3,7 @@
{block name="content"}
<div class="layui-tab layui-tab-card think-bg-white">
<ul class="layui-tab-title">
{foreach ['index'=>'评论管理','recycle'=>'回收站'] as $k=>$v}
{foreach ['index'=>lang('评论管理'),'recycle'=>lang('回收站')] as $k=>$v}
{if isset($type) and $type eq $k}
<li class="layui-this" data-open="{:url('index')}?type={$k}">{$v}</li>
{else}
@ -24,23 +24,23 @@
let $table = $('#ReplyTable').layTable({
even: true, height: 'full', sort: {field: 'id', type: 'desc'},
cols: [[
{field: 'headimg', title: '头 像', width: 70, align: 'center', templet: '<div>{{-showTableImage(d.user_headimg,true,"sm")}}</div>'},
{field: 'headimg', title: '{:lang("头 像")}', width: 70, align: 'center', templet: '<div>{{-showTableImage(d.user_headimg,true,"sm")}}</div>'},
{
title: '会员用户', width: 180, templet: function (d) {
title: '{:lang("会员用户")}', width: 180, templet: function (d) {
let tpls = [];
tpls.push('用户昵称:{{d.user_nickname||d.user_username||"-"}}');
tpls.push('用户手机:<b class="font-code">{{d.user_phone}}</b>');
tpls.push('{:lang("用户昵称")}{{d.user_nickname||d.user_username||"-"}}');
tpls.push('{:lang("用户手机")}<b class="font-code">{{d.user_phone}}</b>');
return laytpl("<div class='nowrap'>" + tpls.join('<br>') + "</div>").render(d);
}
},
{
title: '评论得分', width: 165, align: 'center', templet: function (d) {
title: '{:lang("评论得分")}', width: 165, align: 'center', templet: function (d) {
return laytpl('<div data-rate-number="{{d.rate}}"></div>').render(d)
}
},
{title: '评论内容', field: 'content'},
{title: '{:lang("评论内容")}', field: 'content'},
{
title: '评论图片', templet: function (d) {
title: '{:lang("评论图片")}', templet: function (d) {
let tpls = [];
d.images.map(x => {
tpls.push(laytpl("<div class='uploadimage ta-mr-5' data-lazy-src='{{d.x}}' data-tips-hover data-tips-image style='width:40px;height:40px;background-image:url('{{d.x}}')'></div>").render({x: x}))
@ -48,15 +48,15 @@
return tpls.length > 0 ? tpls.join('') : '<div class="ta-pt-10">-</div>';
}
},
{title: '订单编号', field: 'order_no'},
{title: '{:lang("订单编号")}', field: 'order_no'},
{
title: '评论商品', field: 'gcode', templet: function (d) {
title: '{:lang("评论商品")}', field: 'gcode', templet: function (d) {
return laytpl('{{d.goods_code}}<br>{{d.goods_name}}').render(d)
}
},
{field: 'status', title: '商品状态', minWidth: 110, width: '5%', align: 'center', templet: '#StatusSwitchTpl'},
{field: 'id', sort: true, title: '操作时间', minWidth: 170, templet: "<div>更新时间:{{d.update_time}}<br>评论时间:{{d.create_time}}</div>"},
{toolbar: '#ReplyEdit', title: '操作面板', width: 120, align: 'center', fixed: 'right'},
{field: 'status', title: '{:lang("商品状态")}', minWidth: 110, width: '5%', align: 'center', templet: '#StatusSwitchTpl'},
{field: 'id', sort: true, title: '{:lang("操作时间")}', minWidth: 170, templet: '<div>{:lang("更新时间")}{{d.update_time}}<br>{:lang("评论时间")}{{d.create_time}}</div>'},
{toolbar: '#ReplyEdit', title: '{:lang("操作面板")}', width: 120, align: 'center', fixed: 'right'},
]],
done: function () {
// 动态显示评分星星
@ -82,16 +82,16 @@
<script type="text/html" id="StatusSwitchTpl">
<div class="ta-pt-10 block relative"></div>
<!--{if auth("state")}-->
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="显示|隐藏" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="{:lang('显示')}|{:lang('隐藏')}" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
<!--{else}-->
{{-d.status ? '<b class="color-green">已显示</b>' : '<b class="color-red">已隐藏</b>'}}
{{-d.status ? '<b class="color-green">' + '{:lang("已显示")}' + '</b>' : '<b class="color-red">' + '{:lang("已隐藏")}' + '</b>'}}
<!--{/if}-->
</script>
<!-- 操控面板的模板 -->
<script type="text/html" id="ReplyEdit">
<!--{if auth('edit')}-->
<a class="layui-btn layui-btn-sm" data-modal="{:url('edit')}?id={{d.id}}" data-title="修改评论"> </a>
<a class="layui-btn layui-btn-sm" data-modal="{:url('edit')}?id={{d.id}}" data-title="{:lang('修改评论')}">{:lang('编 辑')}</a>
<!--{/if}-->
</script>
{/block}

View File

@ -1,34 +1,34 @@
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-form-pane form-search" method="get" onsubmit="return false">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">会员用户</label>
<label class="layui-form-label">{:lang('会员用户')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="user_keys" placeholder="请输入手机或昵称" value="{$get.user_keys|default=''}">
<input class="layui-input" name="user_keys" placeholder="{:lang('请输入手机或昵称')}" value="{$get.user_keys|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">订单单号</label>
<label class="layui-form-label">{:lang('订单单号')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="order_no" placeholder="请输入订单单号" value="{$get.order_no|default=''}">
<input class="layui-input" name="order_no" placeholder="{:lang('请输入订单单号')}" value="{$get.order_no|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">商品搜索</label>
<label class="layui-form-label">{:lang('商品搜索')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="goods_keys" placeholder="请输入商品名称或编号" value="{$get.goods_keys|default=''}">
<input class="layui-input" name="goods_keys" placeholder="{:lang('请输入商品名称或编号')}" value="{$get.goods_keys|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">评论时间</label>
<label class="layui-form-label">{:lang('评论时间')}</label>
<label class="layui-input-inline">
<input class="layui-input" data-date-range name="create_time" placeholder="请选择申请时间" value="{$get.create_time|default=''}">
<input class="layui-input" data-date-range name="create_time" placeholder="{:lang('请选择申请时间')}" value="{$get.create_time|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary" type="submit"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary" type="submit"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
</div>
</form>

View File

@ -2,17 +2,17 @@
<div class="layui-card-body ta-pl-40">
<label class="layui-form-item relative block">
<span class="help-label label-required-prev"><b>发货人姓名</b>User Name</span>
<input class="layui-input" name="user_name" vali-name="发货人姓名" placeholder="请输入发货人姓名" required value="{$vo.user_name|default=''}">
<span class="help-label label-required-prev"><b>{:lang('发货人姓名')}</b>User Name</span>
<input class="layui-input" name="user_name" vali-name="{:lang('发货人姓名')}" placeholder="{:lang('请输入发货人姓名')}" required value="{$vo.user_name|default=''}">
</label>
<label class="layui-form-item relative block">
<span class="help-label label-required-prev"><b>发货人手机</b>User Phone</span>
<input class="layui-input" name="user_phone" vali-name="发货人手机" placeholder="请输入发货人手机" required value="{$vo.user_phone|default=''}">
<span class="help-label label-required-prev"><b>{:lang('发货人手机')}</b>User Phone</span>
<input class="layui-input" name="user_phone" vali-name="{:lang('发货人手机')}" placeholder="{:lang('请输入发货人手机')}" required value="{$vo.user_phone|default=''}">
</label>
<div class="layui-form-item">
<span class="help-label label-required-prev"><b>发货所在区域</b>Region Area</span>
<span class="help-label label-required-prev"><b>{:lang('发货所在区域')}</b>Region Area</span>
<div class="layui-row layui-col-space10">
<label class="layui-col-xs4"><select class="layui-select" lay-filter="region_prov" name="region_prov"></select></label>
<label class="layui-col-xs4"><select class="layui-select" lay-filter="region_city" name="region_city"></select></label>
@ -21,16 +21,16 @@
</div>
<label class="layui-form-item relative block">
<span class="help-label label-required-prev"><b>发货详细地址</b>Region Address</span>
<textarea class="layui-textarea" name="region_addr" vali-name="详情地址" placeholder="请输入发货详细地址" required>{$vo.region_addr|default=""}</textarea>
<span class="help-label label-required-prev"><b>{:lang('发货详细地址')}</b>Region Address</span>
<textarea class="layui-textarea" name="region_addr" vali-name="{:lang('详情地址')}" placeholder="{:lang('请输入发货详细地址')}" required>{$vo.region_addr|default=""}</textarea>
</label>
</div>
<div class="hr-line-dashed"></div>
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" data-close data-confirm="确定要取消编辑吗?" type='button'>取消编辑</button>
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" data-close data-confirm="{:lang('确定要取消编辑吗?')}" type='button'>{:lang('取消编辑')}</button>
</div>
</form>

View File

@ -1,21 +1,21 @@
<form action="{:sysuri()}" id="AddressConfigForm" data-table-id="SenderTable" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card-body ta-pl-40">
<fieldset class="layui-form-item layui-bg-gray">
<legend><span class="layui-badge layui-bg-cyan">收货信息</span></legend>
<legend><span class="layui-badge layui-bg-cyan">{:lang('收货信息')}</span></legend>
<div class="layui-form-item layui-row layui-col-space10">
<label class="layui-col-xs6 relative block">
<span class="help-label label-required-prev"><b>收货人姓名</b>User Name</span>
<input class="layui-input" name="user_name" vali-name="收货人姓名" placeholder="请输入收货姓名" required value="{$vo.user_name|default=''}">
<span class="help-label label-required-prev"><b>{:lang('收货人姓名')}</b>User Name</span>
<input class="layui-input" name="user_name" vali-name="{:lang('收货人姓名')}" placeholder="{:lang('请输入收货姓名')}" required value="{$vo.user_name|default=''}">
</label>
<label class="layui-col-xs6 relative block">
<span class="help-label label-required-prev"><b>收货人手机</b>User Mobile</span>
<input class="layui-input" name="user_phone" vali-name="收货人手机" pattern="mobile" placeholder="请输入收货人手机" required value="{$vo.user_phone|default=''}">
<span class="help-label label-required-prev"><b>{:lang('收货人手机')}</b>User Mobile</span>
<input class="layui-input" name="user_phone" vali-name="{:lang('收货人手机')}" pattern="mobile" placeholder="{:lang('请输入收货人手机')}" required value="{$vo.user_phone|default=''}">
</label>
<div class="layui-col-xs12 relative block">
<span class="help-label"><b>收货所在区域</b>原区域:{$vo.extra.region_prov|default='--'} - {$vo.extra.region_city|default=''} - {$vo.extra.region_area|default=''} </span>
<span class="help-label"><b>{:lang('收货所在区域')}</b>{:lang('原区域')}{$vo.extra.region_prov|default='--'} - {$vo.extra.region_city|default=''} - {$vo.extra.region_area|default=''} </span>
<div class="layui-row layui-col-space10">
<label class="layui-col-xs4"><select class="layui-select" lay-filter="form_prov" name="form_prov"></select></label>
<label class="layui-col-xs4"><select class="layui-select" lay-filter="form_city" name="form_city"></select></label>
@ -24,19 +24,19 @@
</div>
<label class="layui-col-xs12 relative block">
<span class="help-label"><b>收货详细地址</b>原地址:{$vo.extra.region_addr|default=""} )</span>
<input class="layui-input" name="region_addr" placeholder="请输入收货地址" required value='{$vo.region_addr|default=""}'>
<span class="help-label"><b>{:lang('收货详细地址')}</b>{:lang('原地址')}{$vo.extra.region_addr|default=""} )</span>
<input class="layui-input" name="region_addr" placeholder="{:lang('请输入收货地址')}" required value='{$vo.region_addr|default=""}'>
</label>
</div>
</fieldset>
<fieldset class="layui-form-item layui-bg-gray">
<legend>
<span class="layui-badge layui-bg-cyan">快递信息</span>
<span class="layui-badge layui-bg-blue pointer" data-express-query>快递跟踪</span>
<span class="layui-badge layui-bg-cyan">{:lang('快递信息')}</span>
<span class="layui-badge layui-bg-blue pointer" data-express-query>{:lang('快递跟踪')}</span>
</legend>
<label class="layui-form-item relative block">
<span class="help-label"><b>快递配送公司</b>Express Company</span>
<span class="help-label"><b>{:lang('快递配送公司')}</b>Express Company</span>
<select class="layui-select" data-delivery-code lay-search name="company_code">
{foreach $items as $k=>$v}{if isset($vo.company_code) and $vo.company_code eq $k}
<option selected value="{$k}">{$v} ( {$k} )</option>
@ -47,13 +47,13 @@
</label>
<label class="layui-form-item relative block">
<span class="help-label"><b>快递配送单号</b>Express Number</span>
<input class="layui-input" data-delivery-number vali-name="快递配送单号" name="express_code" placeholder="请输入快递配送单号" required value='{$vo.express_code|default=""}'>
<span class="help-label"><b>{:lang('快递配送单号')}</b>Express Number</span>
<input class="layui-input" data-delivery-number vali-name="{:lang('快递配送单号')}" name="express_code" placeholder="{:lang('请输入快递配送单号')}" required value='{$vo.express_code|default=""}'>
</label>
<label class="layui-form-item relative block">
<span class="help-label"><b>快递配送描述</b>Express Description</span>
<textarea class="layui-textarea" name="express_remark" placeholder="请输入快递配送描述">{$vo.express_remark|default=""}</textarea>
<span class="help-label"><b>{:lang('快递配送描述')}</b>Express Description</span>
<textarea class="layui-textarea" name="express_remark" placeholder="{:lang('请输入快递配送描述')}">{$vo.express_remark|default=""}</textarea>
</label>
</fieldset>
</div>
@ -63,8 +63,8 @@
{notempty name='vo.express_time'}<input name='express_time' type='hidden' value='{$vo.express_time}'>{/notempty}
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" data-close data-confirm="确定要取消编辑吗?" type='button'>取消编辑</button>
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" data-close data-confirm="{:lang('确定要取消编辑吗?')}" type='button'>{:lang('取消编辑')}</button>
</div>
</form>
@ -84,6 +84,6 @@
$('[data-express-query]').on('click', function () {
let code = $('[data-delivery-code]').val(), number = $('[data-delivery-number]').val();
$.form.modal('{:url("shop.sender/query")}', {code: code, number: number}, '快递追踪查询')
$.form.modal('{:url("shop.sender/query")}', {code: code, number: number}, '{:lang("快递追踪查询")}')
});
</script>

View File

@ -1,6 +1,6 @@
<div class="ta-p-25" style="max-height:450px;overflow:auto">
{empty name='result.data'}
<div class="notdata">还没有快递记录哦!</div>
<div class="notdata">{:lang('还没有快递记录哦!')}</div>
{else}
<ul class="layui-timeline">
{foreach $result.data as $key=>$vo}

View File

@ -2,14 +2,14 @@
{block name="button"}
<!--{if auth('config')}-->
<a class="layui-btn layui-btn-sm layui-btn-primary" data-width="600px" data-modal="{:url('config')}">退货仓库</a>
<a class="layui-btn layui-btn-sm layui-btn-primary" data-width="600px" data-modal="{:url('config')}">{:lang('退货仓库')}</a>
<!--{/if}-->
{/block}
{block name="content"}
<div class="layui-tab layui-tab-card">
<ul class="layui-tab-title notselect">
{foreach ['ta'=>'全部订单','t1'=>'等待发货','t2'=>'已经发货','t3'=>'已经收货'] as $k => $v}
{foreach ['ta'=>lang('全部订单'),'t1'=>lang('等待发货'),'t2'=>lang('已经发货'),'t3'=>lang('已经收货')] as $k => $v}
{if isset($type) and 't'.$type eq $k}
<li class="layui-this" data-open="{:url('index')}?type={$k}">{$v}<sup class="layui-badge border-radius">{$total[$k]??0}</sup></li>
{else}
@ -38,69 +38,69 @@
$(function () {
let tstatus = ['已取消', '待发货', '已发货', '已收货'];
let tstatus = ['{:lang("已取消")}', '{:lang("待发货")}', '{:lang("已发货")}', '{:lang("已收货")}'];
let tstyles = ['layui-bg-gray layui-border-red', 'layui-bg-black', 'layui-bg-blue', 'layui-bg-green'];
$('#SenderTable').layTable({
even: true, height: 'full', sort: {field: 'id', type: 'desc'},
cols: [[
{field: 'headimg', title: '头 像', width: 90, align: 'center', templet: '<div>{{-showTableImage(d.user.headimg,true,"md")}}</div>'},
{field: 'headimg', title: '{:lang("头 像")}', width: 90, align: 'center', templet: '<div>{{-showTableImage(d.user.headimg,true,"md")}}</div>'},
{
field: 'unid', title: '会员用户', width: 170, templet: function (d) {
field: 'unid', title: '{:lang("会员用户")}', width: 170, templet: function (d) {
let tpls = [];
if (d.user) {
tpls.push('<div>用户昵称:{{d.user.nickname||d.user.username||"-"}}</div>');
tpls.push('<div>用户手机:<b class="font-code">{{d.user.phone}}</b></div>');
tpls.push('<div>' + '{:lang("用户昵称")}' + '{{d.user.nickname||d.user.username||"-"}}</div>');
tpls.push('<div>' + '{:lang("用户手机")}' + '<b class="font-code">{{d.user.phone}}</b></div>');
} else {
tpls.push('<div class="color-desc ta-pt-10">无用户账号</div>')
tpls.push('<div class="color-desc ta-pt-10">' + '{:lang("无用户账号")}' + '</div>')
}
return laytpl("<div class='nowrap ta-pt-10'>" + tpls.join('') + "</div>").render(d);
}
},
{
field: 'order_no', title: '订单信息', minWidth: 100, templet: function (d) {
field: 'order_no', title: '{:lang("订单信息")}', minWidth: 100, templet: function (d) {
let status = laytpl('<span class="layui-badge layui-badge-middle flex-center {{d.style}}">{{d.status}}</span>').render({
status: tstatus[d.status], style: tstyles[d.status]
});
// status += laytpl('<span class="layui-badge layui-badge-middle flex-center {{d.style}}" style="zoom:85%;line-height:15px;padding:3px 4px">{{d.status}}</span>').render({
// status: ostatus[d.main.status], style: ostyles[d.main.status]
// });
let tpls = '订单号 <b class="font-code">{{d.main.order_no}}</b> ';
let tpls = '{:lang("订单号")} <b class="font-code">{{d.main.order_no}}</b> ';
if (d.main.amount_real > 0) {
if (d.main.status > 3) {
tpls += '<br>已支付 <b class="font-code">{{str2num(d.main.amount_real)}}</b> 元';
tpls += '<br>' + '{:lang("已支付")}' + ' <b class="font-code">{{str2num(d.main.amount_real)}}</b> {:lang("")}';
} else {
tpls += '<br>需支付 <b class="font-code">{{str2num(d.main.amount_real)}}</b> 元';
tpls += '<br>' + '{:lang("需支付")}' + ' <b class="font-code">{{str2num(d.main.amount_real)}}</b> {:lang("")}';
}
} else {
tpls += '<br>无需支付';
tpls += '<br>' + '{:lang("无需支付")}';
}
if (d.main.amount_express > 0) {
tpls += ' ( 随减 <b class="font-code">{{str2num(d.main.amount_reduct)}}</b> 元,含邮费 <b class="font-code">{{str2num(d.main.amount_express)}}</b> 元)';
tpls += ' ( {:lang("随减")} <b class="font-code">{{str2num(d.main.amount_reduct)}}</b> {:lang("")}{:lang("含邮费")} <b class="font-code">{{str2num(d.main.amount_express)}}</b> {:lang("")})';
} else {
tpls += ' ( 随减 <b class="font-code">{{str2num(d.main.amount_reduct)}}</b> 元,包邮免费 )';
tpls += ' ( {:lang("随减")} <b class="font-code">{{str2num(d.main.amount_reduct)}}</b> {:lang("")}{:lang("包邮免费")} )';
}
tpls += '<br>'
if (d.main.amount_balance > 0) {
tpls += "余额 " + d.main.amount_balance + " 元,"
tpls += '{:lang("余额")} ' + d.main.amount_balance + ' {:lang("元")}'
} else {
tpls += '未使用余额,'
tpls += '{:lang("未使用余额")}'
}
if (d.main.amount_integral > 0) {
tpls += "积分 " + d.main.amount_balance + ""
tpls += '{:lang("积分")} ' + d.main.amount_balance + ''
} else {
tpls += '未使用积分,'
tpls += '{:lang("未使用积分")}'
}
if (d.main.coupon_code) {
tpls += "优惠券 " + d.main.coupon_amount + "元,"
tpls += '{:lang("优惠券")} ' + d.main.coupon_amount + '{:lang("元")}'
} else {
tpls += '未使用优惠券。'
tpls += '{:lang("未使用优惠券")}。'
}
return '<div class="flex">' + status + '<div class="nowrap sub-strong-blue">' + laytpl(tpls).render(d) + '</div></div>';
}
},
{
title: '商品详情', templet: function (d) {
title: '{:lang("商品详情")}', templet: function (d) {
let tpls = [];
d.main.items.forEach(function (v) {
tpls.push(laytpl(
@ -112,7 +112,7 @@
' <div>' +
' <span>{{d.gname}}</span>' +
' <span class="ta-pl-5 color-desc">{{str2name(d.gspec)}}</span><br>' +
' <span>{{d.stock_sales}}件 x {{str2num(d.price_selling)}}元/件,计 {{str2num(d.total_price_selling)}}元</span> ' +
' <span>{{d.stock_sales}}' + '{:lang("")}' + ' x {{str2num(d.price_selling)}}' + '{:lang("元/件")}' + '' + '{:lang("")}' + ' {{str2num(d.total_price_selling)}}' + '{:lang("")}' + '</span> ' +
' </div>' +
' </div>' +
'</div>'
@ -122,29 +122,29 @@
}
},
{
title: '物流信息', templet: function (d) {
title: '{:lang("物流信息")}', templet: function (d) {
let tpls = [];
if (d.status > 1) {
tpls.push('<b>发货物流:</b><span class="ta-mr-5">{{d.company_name}}</span><b class="color-blue font-code">{{d.express_code}}</b>');
tpls.push('<b>' + '{:lang("发货物流")}' + '</b><span class="ta-mr-5">{{d.company_name}}</span><b class="color-blue font-code">{{d.express_code}}</b>');
} else {
tpls.push('<b>发货物流:</b><span class="color-desc">未发货</span>');
tpls.push('<b>' + '{:lang("发货物流")}' + '</b><span class="color-desc">' + '{:lang("未发货")}' + '</span>');
}
tpls.push('<b>联系方式:</b><span class="ta-mr-5">{{d.user_name}}</span><span class="color-blue font-code">{{d.user_phone}}</span>');
tpls.push('<b>收货地址:</b>{{d.region_prov}} {{d.region_city}} {{d.region_area}} {{d.region_addr}}');
tpls.push('<b>' + '{:lang("联系方式")}' + '</b><span class="ta-mr-5">{{d.user_name}}</span><span class="color-blue font-code">{{d.user_phone}}</span>');
tpls.push('<b>' + '{:lang("收货地址")}' + '</b>{{d.region_prov}} {{d.region_city}} {{d.region_area}} {{d.region_addr}}');
return laytpl(tpls.join('<br>')).render(d);
}
},
{
field: 'id', sort: true, title: '创建时间', minWidth: 170, templet: function (d) {
field: 'id', sort: true, title: '{:lang("创建时间")}', minWidth: 170, templet: function (d) {
let tpls = [];
tpls.push('发货时间:{{d.express_time}}');
tpls.push('创建时间:{{d.create_time}}');
tpls.push('更新时间:{{d.update_time}}');
tpls.push('{:lang("发货时间")}{{d.express_time}}');
tpls.push('{:lang("创建时间")}{{d.create_time}}');
tpls.push('{:lang("更新时间")}{{d.update_time}}');
return laytpl(tpls.join('<br>')).render(d)
}
},
/* {if auth('delivery')} */
{toolbar: '#toolbar', title: '操作面板', width: 100, align: 'center', fixed: 'right'},
{toolbar: '#toolbar', title: '{:lang("操作面板")}', width: 100, align: 'center', fixed: 'right'},
/* {/if} */
]]
});
@ -155,9 +155,9 @@
<div class="ta-pt-10"></div>
<!--{if auth('delivery')}-->
{{# if(d.status < 2){ }}
<a class="layui-btn layui-btn-sm" data-title="发货快递管理" data-modal="{:url('delivery')}" data-value="order_no#{{d.order_no}}"> </a>
<a class="layui-btn layui-btn-sm" data-title="{:lang('发货快递管理')}" data-modal="{:url('delivery')}" data-value="order_no#{{d.order_no}}">{:lang('发 货')}</a>
{{# }else{ }}
<a class="layui-btn layui-btn-sm" data-title="发货快递管理" data-modal="{:url('delivery')}" data-value="order_no#{{d.order_no}}"> </a>
<a class="layui-btn layui-btn-sm" data-title="{:lang('发货快递管理')}" data-modal="{:url('delivery')}" data-value="order_no#{{d.order_no}}">{:lang('修 改')}</a>
{{# } }}
<!--{/if}-->
</script>

View File

@ -1,32 +1,32 @@
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-form-pane form-search" method="get" onsubmit="return false">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">会员用户</label>
<label class="layui-form-label">{:lang('会员用户')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="user_keys" placeholder="请输入手机或昵称" value="{$get.user_keys|default=''}">
<input class="layui-input" name="user_keys" placeholder="{:lang('请输入手机或昵称')}" value="{$get.user_keys|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">订单单号</label>
<label class="layui-form-label">{:lang('订单单号')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="order_no" placeholder="请输入订单单号" value="{$get.order_no|default=''}">
<input class="layui-input" name="order_no" placeholder="{:lang('请输入订单单号')}" value="{$get.order_no|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">发货单号</label>
<label class="layui-form-label">{:lang('发货单号')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="delivery_count" placeholder="请输入发货单号" value="{$get.delivery_count|default=''}">
<input class="layui-input" name="delivery_count" placeholder="{:lang('请输入发货单号')}" value="{$get.delivery_count|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">发货状态</label>
<label class="layui-form-label">{:lang('发货状态')}</label>
<label class="layui-input-inline">
<select class="layui-select" name="status">
<option value="">-- 全部 --</option>
{foreach [1=>'等待发货',2=>'已经发货',3=>'已经收货'] as $k=>$v}
<option value="">{:lang('-- 全部 --')}</option>
{foreach [1=>lang('等待发货'),2=>lang('已经发货'),3=>lang('已经收货')] as $k=>$v}
{if isset($get.status) and $get.status eq $k.''}
<option selected value="{$k}">{$v}</option>
{else}
@ -37,37 +37,37 @@
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">创建时间</label>
<label class="layui-form-label">{:lang('创建时间')}</label>
<label class="layui-input-inline">
<input class="layui-input" data-date-range name="create_time" placeholder="请选择创建时间" value="{$get.create_time|default=''}">
<input class="layui-input" data-date-range name="create_time" placeholder="{:lang('请选择创建时间')}" value="{$get.create_time|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">发货时间</label>
<label class="layui-form-label">{:lang('发货时间')}</label>
<label class="layui-input-inline">
<input class="layui-input" data-date-range name="express_time" placeholder="请选择发货时间" value="{$get.express_time|default=''}">
<input class="layui-input" data-date-range name="express_time" placeholder="{:lang('请选择发货时间')}" value="{$get.express_time|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">收货信息</label>
<label class="layui-form-label">{:lang('收货信息')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="user_name" placeholder="请输入收货信息" value="{$get.user_name|default=''}">
<input class="layui-input" name="user_name" placeholder="{:lang('请输入收货信息')}" value="{$get.user_name|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">配送地址</label>
<label class="layui-form-label">{:lang('配送地址')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="address" placeholder="请输入配送地址" value="{$get.address|default=''}">
<input class="layui-input" name="address" placeholder="{:lang('请输入配送地址')}" value="{$get.address|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary" type="submit"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary" type="submit"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
<button class="layui-btn layui-btn-primary" data-form-export="{:url('index')}?type={$type|default=''}" type="button">
<i class="layui-icon layui-icon-export"></i>
<i class="layui-icon layui-icon-export"></i> {:lang('导 出')}
</button>
</div>
</form>
@ -99,13 +99,13 @@
// 设置表头内容
rows.unshift([
'订单号', '商品名称', '商品SKU编码', '商品规格', '数量', '单价', '总额',
'寄件方', '收货人', '电话', '省份', '城市', '区', '地址'
'{:lang("订单号")}', '{:lang("商品名称")}', '{:lang("商品SKU编码")}', '{:lang("商品规格")}', '{:lang("数量")}', '{:lang("单价")}', '{:lang("总额")}',
'{:lang("寄件方")}', '{:lang("收货人")}', '{:lang("电话")}', '{:lang("省份")}', '{:lang("城市")}', '{:lang("")}', '{:lang("地址")}'
]);
// 应用表格样式
return this.withStyle(rows);
}, '订单发货记录' + layui.util.toDateString(Date.now(), '_yyyyMMdd_HHmmss'));
}, '{:lang("订单发货记录")}' + layui.util.toDateString(Date.now(), '_yyyyMMdd_HHmmss'));
});
</script>

View File

@ -13,7 +13,7 @@
<div class="layui-card-table">
{notempty name='showErrorMessage'}
<div class="think-box-notify" type="error">
<b>系统提示:</b><span>{$showErrorMessage|raw}</span>
<b>{:lang('系统提示')}</b><span>{$showErrorMessage|raw}</span>
</div>
{/notempty}
{block name='content'}{/block}

View File

@ -2,18 +2,18 @@
<div class="layui-card-body ta-pl-40">
<fieldset class="layui-form-item">
<legend><span class="layui-badge think-bg-violet">原始资料</span></legend>
<legend><span class="layui-badge think-bg-violet">{:lang('原始资料')}</span></legend>
<div class="layui-row layui-col-space15">
<div class="layui-col-xs3">
<div class="headimg headimg-no" style="width:138px;height:138px" data-tips-image data-lazy-src="{$vo.user.headimg|default='__ROOT__/static/theme/img/headimg.png'}"></div>
</div>
<div class="layui-col-xs9">
<label class="layui-form-item relative block">
<span class="help-label"><b>用户昵称</b>Nickname</span>
<span class="help-label"><b>{:lang('用户昵称')}</b>Nickname</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.user.nickname|default=''}">
</label>
<label class="relative block">
<span class="help-label"><b>用户账号</b>Phone</span>
<span class="help-label"><b>{:lang('用户账号')}</b>Phone</span>
<input class="layui-input layui-bg-gray" readonly value="{$vo.user.phone|default=''}">
</label>
</div>
@ -21,30 +21,30 @@
</fieldset>
<fieldset class="layui-form-item">
<legend><span class="layui-badge think-bg-violet">用户资料</span></legend>
<legend><span class="layui-badge think-bg-violet">{:lang('用户资料')}</span></legend>
<div class="layui-row layui-col-space10">
<div class="layui-col-xs4 ta-pt-0 ta-pb-0">
<label class="layui-form-item block">
<span class="help-label"><b>手机号码</b>User Phone</span>
<input class="layui-input" name="user.phone" placeholder="请输入手机号" required value="{$vo.user.phone|default=''}">
<span class="help-label"><b>{:lang('手机号码')}</b>User Phone</span>
<input class="layui-input" name="user.phone" placeholder="{:lang('请输入手机号')}" required value="{$vo.user.phone|default=''}">
</label>
</div>
<div class="layui-col-xs4 ta-pt-0 ta-pb-0">
<label class="layui-form-item block">
<span class="help-label"><b>用户昵称</b>Nickname</span>
<input class="layui-input" name="user.nickname" placeholder="请输入用户昵称" required value="{$vo.user.nickname|default=''}">
<span class="help-label"><b>{:lang('用户昵称')}</b>Nickname</span>
<input class="layui-input" name="user.nickname" placeholder="{:lang('请输入用户昵称')}" required value="{$vo.user.nickname|default=''}">
</label>
</div>
<div class="layui-col-xs4 ta-pt-0 ta-pb-0">
<label class="layui-form-item block">
<span class="help-label"><b>登录密码</b>Password</span>
<input class="layui-input" name="user.password" placeholder="请输入登录密码,不填写则修改">
<span class="help-label"><b>{:lang('登录密码')}</b>Password</span>
<input class="layui-input" name="user.password" placeholder="{:lang('请输入登录密码,不填写则修改')}">
</label>
</div>
</div>
<label class="layui-form-item">
<span class="help-label"><b>用户备注</b>User Remark</span>
<textarea class="layui-textarea" name="user.remark" placeholder="请输入等级描述">{$vo.user.remark|default=''}</textarea>
<span class="help-label"><b>{:lang('用户备注')}</b>User Remark</span>
<textarea class="layui-textarea" name="user.remark" placeholder="{:lang('请输入等级描述')}">{$vo.user.remark|default=''}</textarea>
</label>
</fieldset>
</div>
@ -54,8 +54,8 @@
{if isset($vo.unid)}<input name='unid' type='hidden' value='{$vo.unid}'>{/if}
<div class="layui-form-item text-center">
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" data-close data-confirm="确定要取消编辑吗?" type='button'>取消编辑</button>
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
<button class="layui-btn layui-btn-danger" data-close data-confirm="{:lang('确定要取消编辑吗?')}" type='button'>{:lang('取消编辑')}</button>
</div>
</form>

View File

@ -6,11 +6,11 @@
<a data-table-id="UserTable" class="layui-btn layui-btn-sm layui-btn-primary" data-queue="{:url('sync')}">{:lang('刷新数据')}</a>
<!--{/if}-->
<!--{if auth('state')}-->
<a data-confirm="确定要启用该用户吗?" data-table-id="UserTable" data-action="{:url('state')}" data-rule="id#{unid};status#0" class='layui-btn layui-btn-sm layui-btn-primary'>批量禁用</a>
<a data-confirm="{:lang('确定要启用该用户吗?')}" data-table-id="UserTable" data-action="{:url('state')}" data-rule="id#{unid};status#0" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('批量禁用')}</a>
<!--{/if}-->
{else}
<!--{if auth('state')}-->
<a data-confirm="确定要恢复这些账号吗?" data-table-id="UserTable" data-action="{:url('state')}" data-rule="id#{unid};status#1" class='layui-btn layui-btn-sm layui-btn-primary'>批量恢复</a>
<a data-confirm="{:lang('确定要恢复这些账号吗?')}" data-table-id="UserTable" data-action="{:url('state')}" data-rule="id#{unid};status#1" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('批量恢复')}</a>
<!--{/if}-->
{/if}
{/block}
@ -18,7 +18,7 @@
{block name="content"}
<div class="layui-tab layui-tab-card">
<ul class="layui-tab-title">
{foreach ['index'=>'用户管理','recycle'=>'回 收 站'] as $k=>$v}
{foreach ['index'=>lang('用户管理'),'recycle'=>lang('回 收 站')] as $k=>$v}
{if isset($type) and $type eq $k}
<li data-open="{:url('index')}?type={$k}" class="layui-this">{$v}</li>
{else}
@ -39,90 +39,90 @@
{field: 'sort', hide: true},
{checkbox: true, fixed: true},
{
title: '头 像', width: 95, align: 'center', templet: function (d) {
title: '{:lang("头 像")}', width: 95, align: 'center', templet: function (d) {
if (!d.user || !d.user.headimg) return '';
return laytpl('<div>{{-showTableImage(d.user.headimg,false,"md")}}</div>').render(d)
}
},
{
title: '用户账号', minWidth: 180, templet: function (d) {
title: '{:lang("用户账号")}', minWidth: 180, templet: function (d) {
let tpls = [];
tpls.push('关联账号:<b class="color-blue">{{d.user.phone}}</b>')
tpls.push('{:lang("关联账号")}<b class="color-blue">{{d.user.phone}}</b>')
if (d.entry_agent > 0) {
tpls.push('推广权益:<b class=color-blue>有推广权益</b>')
tpls.push('{:lang("推广权益")}<b class=color-blue>' + '{:lang("有推广权益")}' + '</b>')
} else {
tpls.push('推广权益:<b class=color-desc>无推广权益</b>')
tpls.push('{:lang("推广权益")}<b class=color-desc>' + '{:lang("无推广权益")}' + '</b>')
}
tpls.push('会员等级:<b class="color-blue">[ VIP{{d.level_code}} ] {{d.level_name||""}}</b>')
tpls.push('{:lang("会员等级")}<b class="color-blue">[ VIP{{d.level_code}} ] {{d.level_name||""}}</b>')
return laytpl(tpls.join('<br>')).render(d);
}
},
{
title: '用户信息', minWidth: 120, templet: function (d) {
title: '{:lang("用户信息")}', minWidth: 120, templet: function (d) {
let tpls = [];
tpls.push('用户昵称:{{d.user.nickname||"-"}}')
tpls.push('账号编号:{{d.user.code||"-"}}')
tpls.push('注册时间:{{d.user.create_time||"-"}}')
tpls.push('{:lang("用户昵称")}{{d.user.nickname||"-"}}')
tpls.push('{:lang("账号编号")}{{d.user.code||"-"}}')
tpls.push('{:lang("注册时间")}{{d.user.create_time||"-"}}')
return laytpl(tpls.join('<br>')).render(d);
}
},
{
title: '上1级头像', width: 95, align: 'center', templet: function (d) {
title: '{:lang("上1级头像")}', width: 95, align: 'center', templet: function (d) {
if (!(d.agent1 && d.user1)) return '';
return laytpl('<div>{{-showTableImage(d.user1.headimg,false,"md")}}</div>').render(d);
}
},
{
title: '上1级代理', minWidth: 200, templet: function (d) {
title: '{:lang("上1级代理")}', minWidth: 200, templet: function (d) {
let tpls = [], left = '';
if (d.agent1 && d.user1) {
if (d.puids) {
left = '<span class="layui-badge layui-badge-middle flex-center layui-bg-green" style="line-height:13px;padding:0 4px">永久绑定</span>';
left = '<span class="layui-badge layui-badge-middle flex-center layui-bg-green" style="line-height:13px;padding:0 4px">' + '{:lang("永久绑定")}' + '</span>';
} else {
left = '<span class="layui-badge layui-badge-middle flex-center layui-bg-red" style="line-height:14px;padding:3px 4px">临时绑定</span>';
left = '<span class="layui-badge layui-badge-middle flex-center layui-bg-red" style="line-height:14px;padding:3px 4px">' + '{:lang("临时绑定")}' + '</span>';
}
tpls.push('账号:<b class="color-blue">{{d.user1.phone}}</b>')
tpls.push('{:lang("账号")}<b class="color-blue">{{d.user1.phone}}</b>')
if (d.agent1.entry_agent > 0) {
tpls.push('推广:<b class=color-blue>有推广权益</b>')
tpls.push('{:lang("推广")}<b class=color-blue>' + '{:lang("有推广权益")}' + '</b>')
} else {
tpls.push('推广:<b class=color-desc>无推广权益</b>')
tpls.push('{:lang("推广")}<b class=color-desc>' + '{:lang("无推广权益")}' + '</b>')
}
tpls.push('等级:<b class="color-blue">VIP{{d.agent1.level_code}}</b> {{d.agent1.level_name||""}}')
tpls.push('{:lang("等级")}<b class="color-blue">VIP{{d.agent1.level_code}}</b> {{d.agent1.level_name||""}}')
} else {
tpls.push('<div class="color-desc ta-pt-20">未绑定上1级</div>')
tpls.push('<div class="color-desc ta-pt-20">' + '{:lang("未绑定上1级")}' + '</div>')
}
return laytpl('<div class="flex">' + left + "<div>" + tpls.join('<br>') + "</div></div>").render(d);
}
},
{
title: '上2级头像', width: 95, align: 'center', templet: function (d) {
title: '{:lang("上2级头像")}', width: 95, align: 'center', templet: function (d) {
if (!(d.agent2 && d.user2 && d.user2.headimg)) return '';
return laytpl('<div>{{-showTableImage(d.user2.headimg,false,"md")}}</div>').render(d);
}
},
{
title: '上2级代理', minWidth: 180, templet: function (d) {
title: '{:lang("上2级代理")}', minWidth: 180, templet: function (d) {
let tpls = [];
if (d.agent2 && d.user2) {
tpls.push('账号:<b class="color-blue">{{d.user2.phone}}</b>')
tpls.push('{:lang("账号")}<b class="color-blue">{{d.user2.phone}}</b>')
if (d.agent2.entry_agent > 0) {
tpls.push('推广:<b class=color-blue>有推广权益</b></b>')
tpls.push('{:lang("推广")}<b class=color-blue>' + '{:lang("有推广权益")}' + '</b></b>')
} else {
tpls.push('推广:<b class=color-desc>无推广权益</b></b>')
tpls.push('{:lang("推广")}<b class=color-desc>' + '{:lang("无推广权益")}' + '</b></b>')
}
tpls.push('等级:<b class="color-blue">VIP{{d.agent2.level_code}}</b> {{d.agent2.level_name||""}}')
tpls.push('{:lang("等级")}<b class="color-blue">VIP{{d.agent2.level_code}}</b> {{d.agent2.level_name||""}}')
} else {
tpls.push('<div class="color-desc ta-pt-20">未绑定上2级</div>')
tpls.push('<div class="color-desc ta-pt-20">' + '{:lang("未绑定上2级")}' + '</div>')
}
return laytpl(tpls.join('<br>')).render(d);
}
},
{field: 'status', title: '账号状态', align: 'center', minWidth: 110, width: '5%', templet: '#StatusSwitchTpl'},
{toolbar: '#toolbar', title: '操作面板', align: 'center', minWidth: 150, width: '9%', fixed: 'right'}
{field: 'status', title: '{:lang("账号状态")}', align: 'center', minWidth: 110, width: '5%', templet: '#StatusSwitchTpl'},
{toolbar: '#toolbar', title: '{:lang("操作面板")}', align: 'center', minWidth: 150, width: '9%', fixed: 'right'}
]]
}).trigger('tool', function (e) {
if (e.event === 'view') {
$.previewPhonePage('{:url("view")}?unid=' + e.data.unid, '模拟用户登录');
$.previewPhonePage('{:url("view")}?unid=' + e.data.unid, '{:lang("模拟用户登录")}');
}
});
@ -142,9 +142,9 @@
<script type="text/html" id="StatusSwitchTpl">
<div class="ta-pt-20"></div>
<!--{if auth("state")}-->
<input type="checkbox" value="{{d.unid}}" lay-skin="switch" lay-text="已激活|已禁用" lay-filter="StatusSwitch" {{-d.user.status>0?'checked':''}}>
<input type="checkbox" value="{{d.unid}}" lay-skin="switch" lay-text="{:lang('已激活')}|{:lang('已禁用')}" lay-filter="StatusSwitch" {{-d.user.status>0?'checked':''}}>
<!--{else}-->
{{-d.status ? '<b class="color-green">已激活</b>' : '<b class="color-red">已禁用</b>'}}
{{-d.status ? '<b class="color-green">' + '{:lang("已激活")}' + '</b>' : '<b class="color-red">' + '{:lang("已禁用")}' + '</b>'}}
<!--{/if}-->
</script>
@ -157,16 +157,16 @@
<script type="text/html" id="toolbar">
<div class="flex-center full-height flex-wrap" style="margin-top:-5px">
<!--{if auth('edit')}-->
<a class="layui-btn layui-btn-sm ta-mr-10 ta-ml-0" data-modal="{:url('edit')}?unid={{d.unid}}" data-title="编辑用户"> </a>
<a class="layui-btn layui-btn-sm ta-mr-10 ta-ml-0" data-modal="{:url('edit')}?unid={{d.unid}}" data-title="{:lang('编辑用户')}">{:lang('编 辑')}</a>
<!--{/if}-->
<!--{if auth('parent')}-->
<a class="layui-btn layui-btn-sm ta-mr-10 ta-ml-0" data-modal="{:url('parent')}" data-value="unid#{{d.unid}}" data-title="设置上级代理(不包含自己及下级)"> </a>
<a class="layui-btn layui-btn-sm ta-mr-10 ta-ml-0" data-modal="{:url('parent')}" data-value="unid#{{d.unid}}" data-title="{:lang('设置上级代理(不包含自己及下级)')}">{:lang('上 级')}</a>
<!--{/if}-->
<!--{if auth('view')}-->
<a class="layui-btn layui-btn-sm ta-mr-10 ta-ml-0 layui-btn-normal" lay-event="view" data-value="unid#{{d.unid}}" data-title="模拟手机登录"> </a>
<a class="layui-btn layui-btn-sm ta-mr-10 ta-ml-0 layui-btn-normal" lay-event="view" data-value="unid#{{d.unid}}" data-title="{:lang('模拟手机登录')}">{:lang('登 录')}</a>
<!--{/if}-->
<!--{if auth('user.recharge/add')}-->
<a class="layui-btn layui-btn-sm ta-mr-10 ta-ml-0" data-modal="{:url('user.recharge/add')}" data-value="unid#{{d.unid}}" data-title="会员充值"> </a>
<a class="layui-btn layui-btn-sm ta-mr-10 ta-ml-0" data-modal="{:url('user.recharge/add')}" data-value="unid#{{d.unid}}" data-title="{:lang('会员充值')}">{:lang('充 值')}</a>
<!--{/if}-->
</div>
</script>

View File

@ -1,18 +1,18 @@
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-form-pane form-search" method="get" onsubmit="return false">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">用户账号</label>
<label class="layui-form-label">{:lang('用户账号')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="user" placeholder="请输入用户账号" value="{$get.user|default=''}">
<input class="layui-input" name="user" placeholder="{:lang('请输入用户账号')}" value="{$get.user|default=''}">
</label>
</div>
<!--{notempty name='upgrades'}-->
<div class="layui-form-item layui-inline">
<label class="layui-form-label">会员等级</label>
<label class="layui-form-label">{:lang('会员等级')}</label>
<div class="layui-input-inline">
<select class="layui-select" name="level_code">
<option value="">-- 全部 --</option>
<option value="">{:lang('-- 全部 --')}</option>
{foreach $upgrades as $upgrade}{if input('level_code') eq $upgrade.number.''}
<option selected value="{$upgrade.number|default=0}">[ VIP{$upgrade.number|default='0'} ] {$upgrade.name|default=''}</option>
{else}
@ -25,11 +25,11 @@
<div class="layui-form-item layui-inline">
<label class="layui-form-label">推广权限</label>
<label class="layui-form-label">{:lang('推广权限')}</label>
<div class="layui-input-inline">
<select class="layui-select" name="level_agent">
<option value="">-- 全部 --</option>
{foreach ['无推广权限','有推广权限'] as $k=>$v}
<option value="">{:lang('-- 全部 --')}</option>
{foreach [lang('无推广权限'),lang('有推广权限')] as $k=>$v}
{if isset($get.level_agent) and $get.level_agent eq $k}
<option selected value="{$k}">{$v}</option>
{else}
@ -41,16 +41,16 @@
<div class="layui-form-item layui-inline">
<label class="layui-form-label">注册时间</label>
<label class="layui-form-label">{:lang('注册时间')}</label>
<div class="layui-input-inline">
<input class="layui-input" data-date-range name="create_time" placeholder="请选择注册时间" value="{$get.create_time|default=''}">
<input class="layui-input" data-date-range name="create_time" placeholder="{:lang('请选择注册时间')}" value="{$get.create_time|default=''}">
</div>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
<button class="layui-btn layui-btn-primary" data-form-export="{:url('index')}?type={$type|default='index'}" type="button">
<i class="layui-icon layui-icon-export"></i>
<i class="layui-icon layui-icon-export"></i> {:lang('导 出')}
</button>
</div>
</form>
@ -74,11 +74,11 @@
});
// 设置表头内容
data.unshift(['ID', '用户编号', '用户姓名', '用户昵称', '关联手机', '绑定邮箱', '会员等级', '注册时间']);
data.unshift(['ID', '{:lang("用户编号")}', '{:lang("用户姓名")}', '{:lang("用户昵称")}', '{:lang("关联手机")}', '{:lang("绑定邮箱")}', '{:lang("会员等级")}', '{:lang("注册时间")}']);
// 应用表格样式
return this.withStyle(data, {H: 120});
}, '用户账号数据' + layui.util.toDateString(Date.now(), '_yyyyMMdd_HHmmss'));
}, '{:lang("用户账号数据")}' + layui.util.toDateString(Date.now(), '_yyyyMMdd_HHmmss'));
});
</script>

View File

@ -11,34 +11,34 @@
cols: [[
{field: 'id', hide: true},
{
title: '用户头像', width: 90, align: 'center', templet: function (d) {
title: '{:lang("用户头像")}', width: 90, align: 'center', templet: function (d) {
if (!d.user || !d.user.headimg) return '';
return laytpl('<div>{{-showTableImage(d.user.headimg,false,"md")}}</div>').render(d)
}
},
{
title: '用户账号', minWidth: 180, templet: function (d) {
title: '{:lang("用户账号")}', minWidth: 180, templet: function (d) {
let tpls = [];
tpls.push('关联账号:<b class="color-blue">{{d.user.phone}}</b>')
tpls.push('{:lang("关联账号")}<b class="color-blue">{{d.user.phone}}</b>')
if (d.level_agent > 0) {
tpls.push('推广权益:<b class=color-blue>有推广权益</b></b>')
tpls.push('{:lang("推广权益")}<b class=color-blue>' + '{:lang("有推广权益")}' + '</b></b>')
} else {
tpls.push('推广权益:<b class=color-desc>无推广权益</b></b>')
tpls.push('{:lang("推广权益")}<b class=color-desc>' + '{:lang("无推广权益")}' + '</b></b>')
}
tpls.push('会员等级:<b class="color-blue">[ VIP{{d.level_code}} ] {{d.level_name||""}}</b>')
tpls.push('{:lang("会员等级")}<b class="color-blue">[ VIP{{d.level_code}} ] {{d.level_name||""}}</b>')
return laytpl(tpls.join('<br>')).render(d);
}
},
{
title: '用户姓名', templet: function (d) {
title: '{:lang("用户姓名")}', templet: function (d) {
let tpls = [];
tpls.push('用户姓名:{{d.user.username||"-"}}')
tpls.push('用户昵称:{{d.user.nickname||"-"}}')
tpls.push('注册时间:{{d.user.create_time||"-"}}')
tpls.push('{:lang("用户姓名")}{{d.user.username||"-"}}')
tpls.push('{:lang("用户昵称")}{{d.user.nickname||"-"}}')
tpls.push('{:lang("注册时间")}{{d.user.create_time||"-"}}')
return laytpl(tpls.join('<br>')).render(d);
}
},
{toolbar: '#SelectUserToolbar', title: '操作面板', align: 'center', width: 100, fixed: 'right'}
{toolbar: '#SelectUserToolbar', title: '{:lang("操作面板")}', align: 'center', width: 100, fixed: 'right'}
]]
}).trigger('tool', function (ev) {
let that = this, data = {puid: ev.data.unid, unid: parseInt("{$get.unid|default=0}")};
@ -56,8 +56,8 @@
<script type="text/html" id="SelectUserToolbar">
<div class="ta-pt-10"></div>
{{# if (typeof checkItemValue !== 'function' || checkItemValue(d.id)){ }}
<a class="layui-btn layui-btn-sm" lay-event="select"> </a>
<a class="layui-btn layui-btn-sm" lay-event="select">{:lang('选 择')}</a>
{{# }else{ }}
<a class="layui-btn layui-btn-sm layui-btn-disabled"> </a>
<a class="layui-btn layui-btn-sm layui-btn-disabled">{:lang('已 选')}</a>
{{# } }}
</script>

View File

@ -1,18 +1,18 @@
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-form-pane form-search nowrap" method="get" onsubmit="return false">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">用户账号</label>
<label class="layui-form-label">{:lang('用户账号')}</label>
<label class="layui-input-inline">
<input class="layui-input" name="user" placeholder="请输入用户账号" value="{$get.user|default=''}">
<input class="layui-input" name="user" placeholder="{:lang('请输入用户账号')}" value="{$get.user|default=''}">
</label>
</div>
<!--{notempty name='upgrades'}-->
<div class="layui-form-item layui-inline">
<label class="layui-form-label">会员等级</label>
<label class="layui-form-label">{:lang('会员等级')}</label>
<div class="layui-input-inline">
<select class="layui-select" name="level_code">
<option value="">-- 全部 --</option>
<option value="">{:lang('-- 全部 --')}</option>
{foreach $upgrades as $upgrade}{if input('level_code') eq $upgrade.number.''}
<option selected value="{$upgrade.number|default=0}">[ VIP{$upgrade.number|default='0'} ] {$upgrade.name|default=''}</option>
{else}
@ -24,13 +24,13 @@
<!--{/notempty}-->
<div class="layui-form-item layui-inline">
<label class="layui-form-label">注册时间</label>
<label class="layui-form-label">{:lang('注册时间')}</label>
<div class="layui-input-inline">
<input class="layui-input" data-date-range name="create_time" placeholder="请选择注册时间" value="{$get.create_time|default=''}">
<input class="layui-input" data-date-range name="create_time" placeholder="{:lang('请选择注册时间')}" value="{$get.create_time|default=''}">
</div>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> {:lang('搜 索')}</button>
</div>
</form>

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