Compare commits

...

17 Commits

Author SHA1 Message Date
邹景立
ca7e8ef15e 修改模板文件 2022-04-17 22:14:51 +08:00
邹景立
4cdf75056e Update wxapp.html 2022-04-17 18:27:34 +08:00
邹景立
bbe79e574b 修改支付通道配置 2022-04-17 16:04:15 +08:00
邹景立
c4b473562b Update sys.php 2022-04-17 13:27:28 +08:00
邹景立
c7a74395f5 Update form.html 2022-04-16 23:26:57 +08:00
邹景立
f1da20ad00 修改模板文件 2022-04-16 23:10:20 +08:00
邹景立
cf4b87cee4 Update index.html 2022-04-16 23:07:58 +08:00
邹景立
4c31c22ddc 修改新闻数据 2022-04-16 23:07:06 +08:00
邹景立
f71819fc16 修改模板文件 2022-04-16 23:04:02 +08:00
邹景立
96f2c438a2 修改新闻处理 2022-04-16 23:01:41 +08:00
邹景立
0d2871b732 修改数据类型 2022-04-16 22:33:56 +08:00
邹景立
cd718510b3 修改列表内容 2022-04-16 22:31:39 +08:00
邹景立
c379d6224e 修改页面管理 2022-04-16 22:28:23 +08:00
邹景立
5809343603 增加动态页面有轮播图片管理 2022-04-16 22:22:51 +08:00
邹景立
de65ab2b66 默认压缩省市区JSON数据 2022-04-16 11:07:06 +08:00
邹景立
c51fba0786 Update area.php 2022-04-16 10:55:41 +08:00
邹景立
dc55a7bc91 修改省市区生成器 2022-04-16 10:53:44 +08:00
60 changed files with 955 additions and 722 deletions

View File

@ -1,4 +1,4 @@
<form class="layui-form layui-card" data-table-id="RoleTable" action="{:sysuri()}" data-auto="true" method="post">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card" data-table-id="RoleTable">
<div class="layui-card-body padding-left-40">

View File

@ -1,9 +1,9 @@
<form class="layui-form layui-card" data-table-id="BaseTable" action="{:sysuri()}" data-auto="true" method="post">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card" data-table-id="BaseTable">
<div class="layui-card-body padding-left-40">
<div class="layui-form-item">
<div class="help-label label-required-prev"><b>数据类型</b>DataType</div>
<div class="layui-form-item label-required-prev">
<div class="help-label"><b>数据类型</b>DataType</div>
{if isset($vo.type)}
<label><input readonly value="{$vo.type|default=''}" class="layui-input think-bg-gray"></label>
{else}

View File

@ -1,4 +1,4 @@
<form onsubmit="return false" data-auto="true" action="{:sysuri()}" method="post" class='layui-form layui-card' autocomplete="off">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card-body padding-top-20">
<div class="color-text margin-left-40 margin-bottom-20 layui-code text-center layui-bg-gray" style="border-left-width:1px">

View File

@ -1,4 +1,4 @@
<form onsubmit="return false" data-auto="true" action="{:sysuri()}" method="post" class='layui-form layui-card' autocomplete="off">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card-body padding-top-20">
<div class="color-text margin-left-40 margin-bottom-20 layui-code text-center layui-bg-gray" style="border-left-width:1px">

View File

@ -1,4 +1,4 @@
<form onsubmit="return false" data-auto="true" action="{:sysuri()}" method="post" class='layui-form layui-card' autocomplete="off">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card-body padding-top-20">
<div class="color-text margin-left-40 margin-bottom-20 layui-code text-center layui-bg-gray" style="border-left-width:1px">

View File

@ -1,4 +1,4 @@
<form onsubmit="return false" data-auto="true" action="{:sysuri()}" method="post" class='layui-form layui-card' autocomplete="off">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card-body padding-top-20">
<div class="color-text margin-left-40 margin-bottom-20 layui-code text-center layui-bg-gray" style="border-left-width:1px">

View File

@ -1,4 +1,4 @@
<form data-auto="true" action="{:sysuri()}" method="post" class='layui-form layui-card'>
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card-body padding-left-40">
<div class="layui-row layui-col-space15 margin-bottom-5">

View File

@ -1,4 +1,4 @@
<form id="theme" action="{:sysuri()}" method="post" data-auto="true" class='layui-form layui-card'>
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card" id="theme">
<div class="layui-card-body padding-left-40">
<div class="layui-form-item margin-bottom-5 label-required-prev">

View File

@ -1,4 +1,4 @@
<form class="layui-form layui-card" data-table-id="MenuTable" action="{:sysuri()}" data-auto="true" method="post">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card" data-table-id="MenuTable">
<div class="layui-card-body">

View File

@ -1,4 +1,4 @@
<form class="layui-form layui-card" action="{:sysuri()}" data-auto="true" method="post" autocomplete="off">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card-body padding-left-40">
<div class="layui-textarea border-0 font-s14 layui-bg-gray padding-top-20 padding-left-20">
<div class="layui-row margin-bottom-15">

View File

@ -1,4 +1,4 @@
<form class="layui-form layui-card" action="{:sysuri()}" data-table-id="UserTable" data-auto="true" method="post">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card" data-table-id="UserTable">
<div class="layui-card-body padding-left-40">
<fieldset>

View File

@ -1,4 +1,4 @@
<form class="layui-form layui-card" data-table-id="UserTable" action="{:sysuri()}" data-auto="true" method="post">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card" data-table-id="UserTable">
<div class="layui-card-body padding-left-40">
<div class="layui-form-item">

View File

@ -26,7 +26,7 @@ class Data extends Controller
}
/**
* 获取轮播图片数据
* 获取图片内容数据
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
@ -34,7 +34,7 @@ class Data extends Controller
public function getSlider()
{
$data = sysdata(input('keys', 'slider'));
$this->success('获取轮播图片', $data);
$this->success('获取图片内容', $data);
}
/**

View File

@ -11,14 +11,6 @@ use think\admin\Controller;
*/
class Config extends Controller
{
/**
* 页面类型
* @var array
*/
protected $pageTypes = [
'关于我们' => '关于我们',
'用户协议' => '用户协议',
];
/**
* 微信小程序配置
@ -30,8 +22,9 @@ class Config extends Controller
*/
public function wxapp()
{
$this->skey = 'wxapp';
$this->title = '微信小程序配置';
$this->__sysconf('wxapp');
$this->__sysdata('wxapp');
}
/**
@ -44,85 +37,11 @@ class Config extends Controller
*/
public function cropper()
{
$this->title = '邀请二维码设置';
$this->skey = 'cropper';
$this->title = '邀请二维码设置';
$this->__sysdata('cropper');
}
/**
* 内容页面管理
* @auth true
* @menu true
*/
public function pageHome()
{
$this->title = '内容页面管理';
$this->fetch('page_home');
}
/**
* 内容页面编辑
* @auth true
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function pageEdit()
{
$this->skey = input('type') ?: $this->pageTypes[0];
$this->title = '编辑' . $this->pageTypes[$this->skey] ?? '';
$this->__sysdata('page_form', 'javascript:history.back()');
}
/**
* 首页推荐位管理
* @menu true
* @auth true
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function iconHome()
{
$this->skey = 'IconHome';
$this->title = '首页推荐位管理';
$this->__sysdata('slider');
}
/**
* 首页轮播图片
* @menu true
* @auth true
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function sliderHome()
{
$this->skey = 'SliderHome';
$this->title = '首页轮播图片';
$this->__sysdata('slider');
}
/**
* 显示并保存配置
* @param string $template 模板文件名称
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
private function __sysconf(string $template)
{
if ($this->request->isGet()) {
$this->fetch($template);
}
if ($this->request->isPost()) {
$data = $this->request->post();
foreach ($data as $k => $v) sysconf($k, $v);
$this->success('配置保存成功!');
}
}
/**
* 显示并保存数据
* @param string $template 模板文件

View File

@ -0,0 +1,87 @@
<?php
namespace app\data\controller\base;
use think\admin\Controller;
use think\admin\model\SystemBase;
/**
* 页面内容管理
* Class Pager
* @package app\data\controller\base
*/
class Pager extends Controller
{
/**
* 字典类型
* @var string
*/
protected $type = '页面内容';
/**
* 页面类型
* @var array
*/
protected $types = [];
/**
* 控制器初始化
* @return void
*/
protected function initialize()
{
$this->types = SystemBase::mk()->items($this->type);
}
/**
* 内容页面管理
* @auth true
* @menu true
*/
public function index()
{
$this->title = '内容页面管理';
$this->fetch();
}
/**
* 内容页面编辑
* @auth true
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function edit()
{
$this->skey = input('get.type', '');
$this->base = $this->types[$this->skey] ?? [];
if (empty($this->base)) $this->error('未配置基础数据!');
$this->title = "编辑{$this->base['name']}";
$this->sysdata();
}
/**
* 显示并保存数据
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
private function sysdata()
{
if ($this->request->isGet()) {
$this->data = sysdata($this->skey);
$this->fetch('form');
} elseif ($this->request->isPost()) {
if (is_string(input('data'))) {
$data = json_decode(input('data'), true) ?: [];
} else {
$data = $this->request->post();
}
if (sysdata($this->skey, $data) !== false) {
$this->success('内容保存成功!', 'javascript:history.back()');
} else {
$this->error('内容保存失败,请稍候再试!');
}
}
}
}

View File

@ -7,6 +7,7 @@ use app\data\service\PaymentService;
use app\data\service\UserAdminService;
use think\admin\Controller;
use think\admin\extend\CodeExtend;
use think\admin\helper\QueryHelper;
/**
* 支付通道管理
@ -31,10 +32,25 @@ class Payment extends Controller
*/
public function index()
{
$this->title = '支付通道管理';
$query = BaseUserPayment::mQuery();
$query->where(['deleted' => 0])->order('sort desc,id desc');
$query->like('name,code')->equal('type,status')->dateBetween('create_at')->page();
$this->type = input('get.type', 'index');
BaseUserPayment::mQuery()->layTable(function () {
$this->title = '支付通道管理';
}, function (QueryHelper $query) {
$query->where(['status' => intval($this->type === 'index'), 'deleted' => 0]);
$query->like('name,code')->equal('status,type#ptype')->dateBetween('create_at');
});
}
/**
* 获取支付名称
* @param array $data
* @return void
*/
protected function _page_filter(array &$data)
{
foreach ($data as &$vo) {
$vo['ntype'] = $this->types[$vo['type']]['name'] ?? $vo['type'];
}
}
/**

View File

@ -0,0 +1,94 @@
<?php
namespace app\data\controller\base;
use think\admin\Controller;
use think\admin\model\SystemBase;
/**
* 图片内容管理
* Class Slider
* @package app\data\controller\base
*/
class Slider extends Controller
{
/**
* 跳转规则定义
* @var string[]
*/
protected $rules = [
'#' => '不跳转',
'LK' => '自定义链接',
'NL' => '新闻资讯列表',
'NS' => '新闻资讯详情',
];
/**
* 数据类型
* @var string
*/
protected $type = '图片内容';
/**
* 页面类型
* @var array
*/
protected $types = [];
/**
* 控制器初始化
* @return void
*/
protected function initialize()
{
$this->types = SystemBase::mk()->items($this->type);
}
/**
* 图片内容管理
* @auth true
* @menu true
*/
public function index()
{
$this->title = '图片内容管理';
$this->fetch();
}
/**
* 编辑图片内容
* @auth true
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function edit()
{
$this->skey = input('get.type', '');
$this->base = $this->types[$this->skey] ?? [];
if (empty($this->base)) $this->error('未配置基础数据!');
$this->number = 10;
$this->sysdata();
}
/**
* 保存图片内容
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
private function sysdata()
{
if ($this->request->isGet()) {
$this->data = sysdata($this->skey);
$this->title = "{$this->base['name']}管理";
$this->fetch('form');
} else {
if (sysdata($this->skey, json_decode(input('data'), true))) {
$this->success("{$this->base['name']}保存成功!");
} else {
$this->error("{$this->base['name']}保存失败,请稍候再试!");
}
}
}
}

View File

@ -7,6 +7,8 @@ use app\data\model\DataNewsMark;
use app\data\service\NewsService;
use think\admin\Controller;
use think\admin\extend\CodeExtend;
use think\admin\helper\QueryHelper;
use think\admin\model\SystemBase;
/**
* 文章内容管理
@ -25,24 +27,14 @@ class Item extends Controller
*/
public function index()
{
$this->title = '文章内容管理';
$query = DataNewsItem::mQuery();
$query->like('mark,name')->dateBetween('create_at');
$query->where(['deleted' => 0])->order('sort desc,id desc')->page();
}
/**
* 文章内容选择器
* @login true
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function select()
{
$query = DataNewsItem::mQuery();
$query->equal('status')->like('name')->dateBetween('create_at');
$query->where(['deleted' => 0])->order('sort desc,id desc')->page();
$this->type = input('get.type', 'index');
DataNewsItem::mQuery($this->get)->layTable(function () {
$this->title = '文章内容管理';
$this->marks = DataNewsMark::items();
}, function (QueryHelper $query) {
$query->like('code,name')->like('mark', ',')->dateBetween('create_at');
$query->where(['status' => intval($this->type === 'index'), 'deleted' => 0]);
});
}
/**
@ -126,4 +118,17 @@ class Item extends Controller
{
DataNewsItem::mDelete();
}
/**
* 文章内容选择
* @login true
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function select()
{
$this->get['status'] = 1;
$this->index();
}
}

View File

@ -11,5 +11,13 @@ use think\admin\Model;
*/
class BaseUserPayment extends Model
{
/**
* 格式化创建时间
* @param string $value
* @return string
*/
public function getCreateAtAttr(string $value): string
{
return format_datetime($value);
}
}

View File

@ -5,11 +5,19 @@ namespace app\data\model;
use think\admin\Model;
/**
*
* 新闻内容模型
* Class DataNewsItem
* @package app\data\model
*/
class DataNewsItem extends Model
{
/**
* 格式化创建时间
* @param string $value
* @return string
*/
public function getCreateAtAttr(string $value): string
{
return format_datetime($value);
}
}

View File

@ -10,6 +10,19 @@ use think\admin\Model;
*/
class DataNewsMark extends Model
{
/**
* 获取标签数据
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public static function items(): array
{
$query = static::mk()->where(['status' => 1, 'deleted' => 0]);
return $query->field('id,name,remark')->order('sort desc,id desc')->select()->toArray();
}
/**
* 格式化创建时间
* @param string $value

View File

@ -25,14 +25,15 @@ if ($app->request->isCli()) {
} else {
// 注册订单支付处理事件
$app->event->listen('ShopOrderPayment', function ($orderNo) use ($app) {
$app->log->notice("订单 {$orderNo} 支付事件,执行用户升级行为");
OrderService::instance()->upgrade($orderNo);
$app->log->notice("订单 {$orderNo} 支付事件,执行用户返利行为");
RebateService::instance()->execute($orderNo);
$app->log->notice("订单 {$orderNo} 支付事件,执行发放余额行为");
UserBalanceService::instance()->confirm($orderNo);
$app->log->notice("订单 {$orderNo} 支付事件,执行用户升级行为");
OrderService::instance()->upgrade($orderNo);
});
// 注册订单确认支付事件

View File

@ -1,25 +0,0 @@
{extend name="../../admin/view/main"}
{block name='content'}
<div class="layui-row layui-col-space20 portal-block-container notselect">
{foreach $pageTypes as $key=>$type}
<div class="layui-col-sm4 layui-col-md4 layui-col-lg3">
<!--{if auth('pageEdit')}-->
<div class="pointer" data-open="{:url('pageEdit')}?type={$key}">
<div class="portal-block-item nowrap think-bg-violet">
<div>编辑页面内容</div>
<div style="font-size:26px">{$type|default=''}</div>
</div>
<i class="portal-block-icon layui-icon layui-icon-read"></i>
</div>
<!--{else}-->
<div class="portal-block-item nowrap think-bg-violet">
<div>编辑页面内容</div>
<div style="font-size:26px">{$type|default=''}</div>
</div>
<i class="portal-block-icon layui-icon layui-icon-read"></i>
<!--{/if}-->
</div>
{/foreach}
</div>
{/block}

View File

@ -1,124 +0,0 @@
{extend name="../../admin/view/main"}
{block name="content"}
<div class="think-box-shadow">
<form autocomplete="off" class='layui-form layui-card' id="DataForm" onsubmit="return false;" style="width:850px">
<div class="layui-card-header text-center margin-20 font-w7 color-text layui-bg-gray border-radius-5">
{$title|default='图片数据管理'}<span class="color-desc font-s12"> ( 建议上传图片尺寸为 690px 250px )</span>
</div>
<div class="layui-card-body margin-top-20 padding-bottom-0">
<div class="padding-left-20" data-rule-list>
<div class="layui-form-item text-center">
<a class="layui-btn layui-btn-primary" data-item-add>添加图片</a>
</div>
</div>
<div class="hr-line-dashed margin-top-30"></div>
<div class="layui-form-item text-center padding-left-20">
<button class="layui-btn" data-submit>保存数据</button>
</div>
</div>
</form>
</div>
<div class="layui-hide" data-item-tpl>
<div class="layui-form-item" data-rule-item>
<div class="layui-input-inline nowrap relative" style="width:180px">
<input data-upload-image name="img[]" type="hidden">
</div>
<label class="layui-input-inline nowrap relative margin-bottom-5" style="width:300px">
<b class="notselect color-green margin-right-5">图片名称</b>
<input class="layui-input inline-block" name="name[]" placeholder="请输入图片名称" required style="width:240px" value="#">
<a class="layui-btn layui-btn-primary" data-item-up><i class="layui-icon layui-icon-up margin-0"></i></a>
<a class="layui-btn layui-btn-primary" data-item-dn><i class="layui-icon layui-icon-down margin-0"></i></a>
<a class="layui-btn layui-btn-primary" data-item-rm><i class="layui-icon layui-icon-close margin-0"></i></a>
</label>
<label class="layui-input-inline nowrap relative margin-bottom-5" style="width:300px">
<b class="notselect color-green margin-right-5">跳转规则</b>
<input class="layui-input inline-block" name="rule[]" placeholder="请输入跳转规则" required style="width:240px" value="#">
<a class="layui-btn layui-btn-primary" data-prefix="NEWS" data-rule-page="{:url('data/news.item/select')}">选择文章</a>
<a class="layui-btn layui-btn-primary" data-prefix="GOODS" data-rule-page="{:url('data/shop.goods/select')}">选择商品</a>
<span class="help-block block notselect">若要跳转页面,请选择对应的数据或填写跳转的 URL 地址,不跳转请填写 #” 号占位。</span>
</label>
</div>
</div>
<label class="layui-hide">
<textarea id="DefaultData">{$data|default=[]|json_encode}</textarea>
</label>
<style>
[data-rule-page] {
margin-top: -3px;
margin-left: 5px;
}
[data-rule-item] {
padding-left: 40px;
margin-bottom: 20px;
}
[data-rule-item] .uploadimage {
width: 135px;
height: 100px;
}
[data-item-dn], [data-item-up], [data-item-rm] {
margin-top: -4px;
margin-left: 5px;
}
</style>
<script>
(function (data) {
/*! 默认数据渲染 */
if (data.length < 1) addItem();
else data.forEach(function (item) {
addItem(item)
});
/*! 初始化上传插件 */
(function initUpload() {
$('[data-rule-list] input[data-upload-image]').map(function () {
if (!$(this).attr('inited')) $(this).attr('inited', true).uploadOneImage();
});
setTimeout(initUpload, 100);
})();
/*! 数据选项操作 */
$('[data-rule-list]').on('click', '[data-rule-page]', function ($that) {
$that = $(this), top.setItemValue = function (value) {
$that.prevAll('input').val(($that.data('prefix') + '#{v}').replace('{v}', value));
};
$.form.iframe($(this).data('rule-page'), $that.data('title') || $that.text(), ['930px', '600px']);
}).on('click', '[data-item-add]', function () {
addItem();
}).on('click', '[data-item-rm]', function () {
$(this).parents('[data-rule-item]').remove();
}).on('click', '[data-item-up]', function () {
var item = $(this).parents('[data-rule-item]');
var prev = item.prev('[data-rule-item]');
if (item.index() > 0) item.insertBefore(prev);
}).on('click', '[data-item-dn]', function () {
var item = $(this).parents('[data-rule-item]');
var next = item.next('[data-rule-item]');
if (next) item.insertAfter(next);
});
/*! 表单提交处理 */
$('form#DataForm').vali(function (ret) {
var idx, data = [];
for (idx in ret.img) {
if (!ret.img[idx]) return $.msg.tips('请上传展示图片哦!');
data.push({img: ret.img[idx], rule: ret.rule[idx], name: ret.name[idx]});
}
$.form.load('{$request->url()}', {data: JSON.stringify(data)}, 'post');
});
})(JSON.parse($('#DefaultData').val() || '[]') || []);
/*! 添加数据选项 */
function addItem(data) {
this.$html = $($('[data-item-tpl]').html());
if (data) for (this.index in data) this.$html.find('[name^="' + this.index + '"]').val(data[this.index]);
$('[data-item-add]').parent().before(this.$html), setTimeout(function () {
$.form.reInit();
}, 100);
}
</script>
{/block}

View File

@ -2,21 +2,21 @@
{block name="content"}
<div class="think-box-shadow">
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-card" data-auto="true" method="post" style="width:850px">
<div class="layui-card-header text-center margin-20 font-w7 color-text layui-bg-gray border-radius-5">
{$title|default='小程序接口配置'}<span class="color-desc font-s12"> ( 微信公众号平台配置获取 )</span>
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card" style="width:850px">
<div class="layui-card-header text-center margin-20">
<b>{$title|default='小程序接口配置'}</b><span class="color-desc font-s12"> ( 微信公众号平台配置获取 )</span>
</div>
<div class="layui-card-body padding-left-40 padding-bottom-0">
<label class="layui-form-item margin-bottom-20 block relative">
<span class="color-green font-s14 font-w7 margin-right-10">小程序 AppId</span>
<input class="layui-input" maxlength="18" name="data.wxapp_appid" pattern="^wx[0-9a-z]{16}$" placeholder="请输入18位小程序 AppID" required value="{:sysconf('data.wxapp_appid')}">
<label class="layui-form-item block relative">
<span class='help-label'><b>小程序 AppId</b></span>
<input class="layui-input" maxlength="18" name="appid" pattern="^wx[0-9a-z]{16}$" placeholder="请输入18位小程序 AppID" required value="{$data.appid|default=''}">
<span class="help-block"><b>必选</b>,微信小程序 AppID 需要微信公众号平台获取!</span>
</label>
<label class="layui-form-item margin-bottom-20 block relative">
<span class="color-green font-s14 font-w7 margin-right-10">小程序密钥 AppSecret</span>
<input class="layui-input" maxlength="32" name="data.wxapp_appkey" pattern="^[0-9a-z]{32}$" placeholder="请输入32位小程序 AppSecret" required value="{:sysconf('data.wxapp_appkey')}">
<label class="layui-form-item block relative">
<span class="help-label"><b>小程序密钥 AppSecret</b></span>
<input class="layui-input" maxlength="32" name="appkey" pattern="^[0-9a-z]{32}$" placeholder="请输入32位小程序 AppSecret" required value="{$data.appkey|default=''}">
<span class="help-block"><b>必选</b>,微信小程序 AppSecret 需要微信公众号平台获取!</span>
</label>

View File

@ -1,15 +1,13 @@
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-card" data-auto="true" method="post">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card-body padding-left-40">
<label class="layui-form-item block relative">
<span class="color-green font-w7 label-required-prev">折扣方案名称</span>
<span class="color-desc margin-left-5">Discount Name</span>
<span class="help-label"><b>折扣方案名称</b>Discount Name</span>
<input class="layui-input" name="name" placeholder="请输入折扣方案名称" required value="{$vo.name|default=''}">
</label>
<div class="layui-form-item">
<span class="color-green font-w7 label-required-prev">用户等级折扣</span>
<span class="color-desc margin-left-5">Discount Scheme</span>
<div class="layui-form-item label-required-prev">
<span class="help-label"><b>用户等级折扣</b>Discount Scheme</span>
<table class="layui-table think-level-box" lay-skin="line">
<thead>
<tr>
@ -37,8 +35,7 @@
</div>
<label class="layui-form-item block relative">
<span class="color-green font-w7">折扣方案备注</span>
<span class="color-desc margin-left-5">Discount Remark</span>
<span class="help-label"><b>折扣方案备注</b>Discount Remark</span>
<textarea class="layui-textarea" name="remark" placeholder="请输入折扣方案备注">{$vo.remark|default=''}</textarea>
</label>

View File

@ -1,7 +1,7 @@
{extend name="../../admin/view/main"}
{block name='content'}
<form data-table-id="MessageTable" action="{:sysuri()}" class="layui-card layui-form" data-auto="true" method="post">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card" data-table-id="MessageTable">
<div class="layui-card-body">
<label class="layui-form-item relative block">

View File

@ -1,36 +1,35 @@
{extend name="../../admin/view/main"}
{block name='content'}
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-card" data-auto="true" method="post">
<form action="{:sysuri()}?type={$get.type|default=''}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card-body">
<label class="layui-form-item relative block">
<span class="color-green font-w7">页面名称</span>
<span class="color-desc margin-left-5">Page Name</span>
<input class="layui-input" name="name" placeholder="请输入页面名称" required value='{$data.name|default=""}'>
<span class="help-label"><b>页面名称</b>Page Name</span>
<input class="layui-input" name="name" placeholder="请输入页面名称" required value='{$data.name|default=$base.name}'>
</label>
<div class="layui-form-item relative block">
<span class="color-green font-w7 label-required-prev">页面内容</span>
<span class="color-desc margin-left-5">Page Content</span>
<label class="relative block">
<textarea class="layui-hide" name="content">{$data.content|default=''}</textarea>
<div class="layui-form-item label-required-prev">
<span class="help-label"><b>页面内容</b>Page Content</span>
<label class="relative block" style="height:606px">
<textarea class="layui-hide" name="content">{$data.content|default=$base.content}</textarea>
</label>
</div>
<div class="hr-line-dashed"></div>
<input type="hidden" name="type" value="{$get.type|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-history-back type='button'>取消编辑</button>
</div>
</div>
</div>
</form>
<script>
require(['ckeditor'], function () {
window.createEditor('[name=content]', {height: 535});
window.createEditor('[name=content]', {height: 533});
});
</script>
{/block}

View File

@ -0,0 +1,28 @@
{extend name="../../admin/view/main"}
{block name='content'}
<div class="think-box-notify">温馨提示:如需添加新内容,需要在系统管理的基础数据添加类似为 <b>{$type|default=''}</b> 的基础数据。</div>
<div class="layui-row layui-col-space20 portal-block-container notselect">
{foreach $types as $key=>$type}
<div class="layui-col-sm4 layui-col-md4 layui-col-lg3">
<!--{if auth('edit')}-->
<div class="pointer" data-open="{:url('edit')}?type={$key}">
<div class="portal-block-item nowrap think-bg-violet">
<div class="font-s14">编辑页面</div>
<div class="font-s16">{$type.name|default=''}</div>
</div>
<i class="portal-block-icon layui-icon layui-icon-read"></i>
</div>
<!--{else}-->
<div>
<div class="portal-block-item nowrap think-bg-violet">
<div class="font-s14">编辑页面</div>
<div class="font-s16">{$type.name|default=''}</div>
</div>
<i class="portal-block-icon layui-icon layui-icon-read"></i>
</div>
<!--{/if}-->
</div>
{/foreach}
</div>
{/block}

View File

@ -1,4 +1,4 @@
{extend name="../../admin/view/main"}
{extend name='../../admin/view/table'}
{block name="button"}
<!--{if auth("add")}-->
@ -6,68 +6,90 @@
<!--{/if}-->
<!--{if auth("remove")}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-action='{:url("remove")}' data-confirm="确定要删除这些支付吗?" data-rule="id#{key}">删除支付</button>
<button class='layui-btn layui-btn-sm layui-btn-primary' data-action='{:url("remove")}' data-confirm="确定要删除这些支付吗?" data-rule="id#{id}">删除支付</button>
<!--{/if}-->
{/block}
{block name='content'}
<div class="think-box-shadow">
{include file='base/payment/index_search'}
<table class="layui-table margin-top-10" lay-skin="line">
{notempty name='list'}
<thead>
<tr>
<th class='list-table-check-td think-checkbox'>
<label><input data-auto-none data-check-target='.list-check-box' type='checkbox'></label>
</th>
<th class='list-table-sort-td'>
<button class="layui-btn layui-btn-xs" data-reload type="button"> </button>
</th>
<th class="text-left nowrap">支付名称</th>
<th class="text-left nowrap">支付编号</th>
<th class="text-left nowrap">支付方式</th>
<th class="text-left nowrap">使用状态</th>
<th class="text-left nowrap">创建时间</th>
<th class="text-left nowrap"></th>
</tr>
</thead>
{/notempty}
<tbody>
{foreach $list as $key=>$vo}
<tr>
<td class='list-table-check-td think-checkbox'>
<label><input class="list-check-box" type='checkbox' value='{$vo.id}'></label>
</td>
<td class='list-table-sort-td'>
<label><input class="list-sort-input" data-action-blur="{:sysuri()}" data-loading="false" data-value="id#{$vo.id};action#sort;sort#{value}" value="{$vo.sort}"></label>
</td>
<td class="text-left nowrap">
<div class="headimg headimg-xs headimg-no" data-tips-hover data-tips-image data-lazy-src="{$vo.cover}"></div>
{$vo.name|default=''}
</td>
<td class="text-left nowrap">{$vo.code|default=''}</td>
<td class="text-left nowrap">{$types[$vo.type]['name']??$vo.type}</td>
<td>{if $vo.status eq 0}<span class="color-red">已禁用</span>{elseif $vo.status eq 1}<span class="color-green">已激活</span>{/if}</td>
<td class="text-left nowrap">{$vo.create_at|format_datetime}</td>
<td class='text-left nowrap'>
<!--{if auth("edit")}-->
<a class="layui-btn layui-btn-sm" data-open="{:url('edit')}?id={$vo.id}"> </a>
<!--{/if}-->
<!--{if auth("state") and $vo.status eq 1}-->
<a class="layui-btn layui-btn-sm layui-btn-warm" data-action="{:url('state')}" data-value="id#{$vo.id};status#0"> </a>
<!--{elseif auth("state") and $vo.status eq 0}-->
<a class="layui-btn layui-btn-sm layui-btn-warm" data-action="{:url('state')}" data-value="id#{$vo.id};status#1"> </a>
<!--{/if}-->
<!--{if auth("remove")}-->
<a class="layui-btn layui-btn-sm layui-btn-danger" data-action="{:url('remove')}" data-confirm="确定要删除该支付吗?" data-value="id#{$vo.id}"> </a>
<!--{/if}-->
</td>
</tr>
{/foreach}
</tbody>
</table>
{empty name='list'}<span class="notdata">没有记录哦</span>{else}{$pagehtml|raw|default=''}{/empty}
{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}
<li data-open="{:url('index')}?type={$k}" class="layui-this color-green">{$v}</li>
{else}
<li data-open="{:url('index')}?type={$k}">{$v}</li>
{/if}{/foreach}
</ul>
<div class="layui-tab-content">
{include file='base/payment/index_search'}
<table id="PaymentTable" data-url="{:sysuri()}" data-target-search="form.form-search"></table>
</div>
</div>
{/block}
{block name='script'}
<script>
$(function () {
// 初始化表格组件
$('#PaymentTable').layTable({
even: true, height: 'full',
sort: {field: 'sort desc,code', type: 'desc'},
where: {type: '{$type|default="index"}'},
cols: [[
{checkbox: true, fixed: true},
{field: 'sort', title: '排序权重', align: 'center', width: 100, sort: true, templet: '#SortInputTpl'},
{field: 'code', title: '支付编号', align: "center", minWidth: 170},
{field: 'ntype', title: '支付类型', align: "center", minWidth: 170},
{
field: 'cover', title: '图片', width: 60, align: 'center', templet: function (d) {
if (!d.cover) return '';
return layui.laytpl('<div data-tips-image data-tips-hover class="headimg headimg-xs headimg-no margin-0" data-lazy-src="{{d.cover}}"></div>').render(d);
}
},
{field: 'name', title: '支付名称', align: 'left', minWidth: 140},
{field: 'status', title: '支付状态', align: 'center', minWidth: 110, templet: '#StatusSwitchTpl'},
{field: 'create_at', title: '创建时间', align: 'center', minWidth: 170, sort: true},
{toolbar: '#toolbar', title: '操作面板', align: 'center', minWidth: 80, fixed: 'right'},
]]
});
// 数据状态切换操作
layui.form.on('switch(StatusSwitch)', function (obj) {
var data = {id: obj.value, status: obj.elem.checked > 0 ? 1 : 0};
$.form.load("{:url('state')}", data, 'post', function (ret) {
if (ret.code < 1) $.msg.error(ret.info, 3, function () {
$('#PaymentTable').trigger('reload');
}); else {
$('#PaymentTable').trigger('reload');
}
return false;
}, false);
});
});
</script>
<!-- 列表排序权重模板 -->
<script type="text/html" id="SortInputTpl">
<input type="number" min="0" data-blur-number="0" data-action-blur="{:sysuri()}" data-value="id#{{d.id}};action#sort;sort#{value}" data-loading="false" value="{{d.sort}}" class="layui-input text-center">
</script>
<!-- 数据状态切换模板 -->
<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':''}}>
<!--{else}-->
{{d.status ? '<b class="color-green">已启用</b>' : '<b class="color-red">已禁用</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>
<!--{/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>
<!--{/if}-->
</script>
{/block}

View File

@ -1,12 +1,6 @@
<fieldset>
<legend>条件搜索</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-input-inline">
<input class="layui-input" name="name" placeholder="请输入支付名称" value="{$get.name|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">支付编号</label>
@ -15,12 +9,20 @@
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">支付名称</label>
<label class="layui-input-inline">
<input class="layui-input" name="name" placeholder="请输入支付名称" value="{$get.name|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">支付方式</label>
<div class="layui-input-inline">
<select class="layui-select" name="type">
<select class="layui-select" name="ptype">
<option value="">-- 全部 --</option>
{foreach $types as $k=>$v}{if !empty($v['bind'])}{if $k eq input('type')}
{foreach $types as $k=>$v}{if !empty($v['bind'])}
{if isset($get.ptype) and $k eq $get.ptype}
<option selected value="{$k}">{$v.name}</option>
{else}
<option value="{$k}">{$v.name}</option>
@ -29,21 +31,6 @@
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">使用状态</label>
<div class="layui-input-inline">
<select class="layui-select" name="status">
<option value="">-- 全部 --</option>
{foreach ['已禁用的记录', '已激活的记录'] as $k=>$v}
{if $k.'' eq input('status')}
<option selected value="{$k}">{$v}</option>
{else}
<option value="{$k}">{$v}</option>
{/if}{/foreach}
</select>
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">创建时间</label>
<label class="layui-input-inline">

View File

@ -0,0 +1,141 @@
{extend name="../../admin/view/main"}
{block name="content"}
<style>
[data-upload-image] + .uploadimage {
width: 100px;
height: 100px;
margin: 0 !important;
}
</style>
<div class="think-box-shadow">
<form id="DataForm" class='layui-form' autocomplete='off' action="{:sysuri()}?type={$get.type|default=''}" onsubmit="return false" style="width:850px">
<div class="text-center padding-top-10">
<b class="color-text font-s16">{$title|default='图片内容管理'}</b>
<div class="color-desc font-s12">{$base.content|default='图片尺寸1080px * 1882px'}</div>
<!--{if $app->isDebug() && !empty($skey)}-->
<i class="color-desc pull-right">{$skey}</i>
<!--{/if}-->
</div>
<div class="hr-line-dashed margin-bottom-25"></div>
<div class="layui-form-item" data-item-box>
<div class="layui-form-item text-center">
<a class="layui-btn layui-btn-normal" data-item-add>添加选项</a>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="layui-form-item text-center">
<button class="layui-btn" data-submit>保存数据</button>
</div>
</form>
</div>
<div data-item-tpl class="layui-hide">
<div class="layui-form-item" style="padding-left:80px" data-news-item>
<div class="layui-input-inline text-center" style="width:140px">
<input data-upload-image name="img[]" type="hidden">
</div>
<div class="nowrap margin-bottom-5">
<label class="inline-block relative text-middle">
<span class="color-green font-s13 margin-right-5">图标标题</span>
<input class="layui-input inline-block" style="width:280px" name="title[]" value="#" required placeholder="请输入图标标题">
</label>
<div class="inline-block margin-left-5">
<a data-item-up class="layui-btn layui-btn-primary"><i class="layui-icon layui-icon-up"></i></a>
<a data-item-dn class="layui-btn layui-btn-primary"><i class="layui-icon layui-icon-down"></i></a>
<a data-item-rm class="layui-btn layui-btn-primary"><i class="layui-icon layui-icon-close"></i></a>
</div>
</div>
<div class="nowrap margin-bottom-5">
<label class="inline-block relative">
<span class="color-green font-s13 margin-right-5">跳转规则</span>
<input class="layui-input inline-block" style="width:280px" name="url[]" value="#" required placeholder="请输入跳转规则">
</label>
<div class="inline-block margin-left-5">
<select class="layui-select" name="type[]" lay-filter="TypeSelect" data-item-rule lay-ignore>
{foreach $rules as $k=>$v}
<option value="{$k}">{$k} - {$v}</option>
{/foreach}
</select>
</div>
<div class="help-block">若要跳转页面,请选择对应的数据或填写跳转的 URL 地址,不跳转请填写 #” 号占位。</div>
</div>
</div>
</div>
<label class="layui-hide">
<textarea id="DefaultData">{$data|default=[]|json_encode}</textarea>
</label>
<script>
$(function () {
/*! 默认数据处理 */
var defas = JSON.parse($('#DefaultData').val()), idx;
if (defas.length > 0) for (idx in defas) addItem(defas[idx]); else addItem({});
/*! 跳转规则选择器 */
layui.form.on('select(TypeSelect)', function (data) {
var input = $(data.elem).parent().prev('label').find('input');
var title = data.elem.options[data.elem.selectedIndex].innerText.split(' - ').pop();
window.setItemValue = function (id, name) {
input.val(data.value + '#' + (id || '0') + '#' + (name || title));
}, this.openModel = function (url) {
return $.form.modal(url, {}, title, null, true, null, '840px', '5%');
};
if (data.value === '#') return input.val('#');
if (data.value === 'LK') return /^https?:\/\//.test(input.val()) || input.val('#').focus();
if (data.value === 'NS') return this.openModel('{:url("data/news.item/select")}');
return window.setItemValue();
});
/*! 表单元素操作 */
$('form#DataForm').on('click', '[data-item-add]', function () {
addItem({});
}).on('click', '[data-item-rm]', function () {
$(this).parents('[data-news-item]').remove();
setAddButton();
}).on('click', '[data-item-up]', function () {
var item = $(this).parents('[data-news-item]');
var prev = item.prev('[data-news-item]');
if (item.index() > 0) item.insertBefore(prev);
}).on('click', '[data-item-dn]', function () {
var item = $(this).parents('[data-news-item]');
var next = item.next('[data-news-item]');
if (next) item.insertAfter(next);
}).vali(function (form, data) {
for (idx in form.img) {
if (!form.img[idx]) return $.msg.tips('需要上传图片文件哦!');
data.push({img: form.img[idx], url: form.url[idx], type: form.type[idx], title: form.title[idx]});
}
$.form.load(this.action, {data: JSON.stringify(data)}, 'post');
});
/*! 添加图片数据项 */
function addItem(data) {
data.url = data.url || '#';
var $html = $($('[data-item-tpl]').html());
for (idx in data) $html.find('[name^=' + idx + ']').val(data[idx]);
$html.find('select').removeAttr('lay-ignore').find('option').each(function () {
if (data.url === '#' && this.value === data.url) this.selected = true;
else if (this.value === data.url.split('#')[0]) this.selected = true;
}), $('[data-item-add]').parent().before($html), setAddButton();
/*! 初始化插件绑定 */
$.form.reInit($html).find('input[data-upload-image]').uploadOneImage();
}
/*! 检查并操作按钮 */
function setAddButton() {
this.limit = parseInt('{$number|default=0}');
this.laster = $('[data-item-box] [data-item-add]').parent();
this.number = $('[data-item-box] [data-news-item]').size();
if (this.number >= this.limit && this.limit > 0) {
this.laster.addClass('layui-hide');
} else {
this.laster.removeClass('layui-hide');
}
}
});
</script>
{/block}

View File

@ -0,0 +1,28 @@
{extend name="../../admin/view/main"}
{block name='content'}
<div class="think-box-notify">温馨提示:如需添加新内容,需要在系统管理的基础数据添加类似为 <b>{$type|default=''}</b> 的基础数据。</div>
<div class="layui-row layui-col-space20 portal-block-container notselect">
{foreach $types as $key=>$type}
<div class="layui-col-sm4 layui-col-md4 layui-col-lg3">
<!--{if auth('edit')}-->
<div class="pointer" data-open="{:url('edit')}?type={$key}">
<div class="portal-block-item nowrap think-bg-violet">
<div class="font-s14">编辑页面</div>
<div class="font-s16">{$type.name|default=''}</div>
</div>
<i class="portal-block-icon layui-icon layui-icon-carousel"></i>
</div>
<!--{else}-->
<div>
<div class="portal-block-item nowrap think-bg-violet">
<div class="font-s14">编辑页面</div>
<div class="font-s16">{$type.name|default=''}</div>
</div>
<i class="portal-block-icon layui-icon layui-icon-carousel"></i>
</div>
<!--{/if}-->
</div>
{/foreach}
</div>
{/block}

View File

@ -14,7 +14,7 @@
}
</style>
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-card" data-auto="true" method="post">
<form action="{:sysuri()}" class="layui-form layui-card" data-auto="true" method="post">
<div class="layui-card-body padding-left-40">
<fieldset class="layui-form-item">

View File

@ -1,12 +1,12 @@
{extend name="../../admin/view/main"}
{block name='content'}
<form action="{:sysuri()}" class="layui-form layui-card" data-auto="true" method="post">
<form action="{:sysuri()}" class="layui-card layui-form" data-auto="true" method="post">
<div class="layui-card-body">
{notempty name='marks'}
<div class="layui-form-item">
<span class="help-label"><b>文章标签</b>Mark Name</span>
<!--{notempty name='marks'}-->
<div class="layui-form-item label-required-prev">
<span class="help-label"><b>文章标签</b>News Mark</span>
<div class="layui-textarea help-checks">
{foreach $marks as $tag}{if isset($vo.mark) && is_array($vo.mark) && in_array($tag.name, $vo.mark)}
<label class="think-checkbox notselect"><input checked lay-ignore name="mark[]" type="checkbox" value="{$tag.name}"> {$tag.name}</label>
@ -15,37 +15,30 @@
{/if}{/foreach}
</div>
</div>
{/notempty}
<!--{/notempty}-->
<div class="layui-form-item label-required-prev">
<span class="help-label"><b>文章封面</b>Conver Image</span>
<span class="help-label"><b>文章封面</b>News Conver</span>
<div class="relative block label-required-null">
<input class="layui-input think-bg-gray" readonly name="cover" placeholder="请上传文章封面" required value='{$vo.cover|default=""}'>
<a class="input-right-icon layui-icon layui-icon-upload" data-field="cover" data-file data-type="png,jpg,gif"></a>
<script>$('[name="cover"]').uploadOneImage()</script>
<input class="layui-input think-bg-gray" name="cover" placeholder="请上传文章封面" readonly required value='{$vo.cover|default=""}'>
<a class="layui-icon layui-icon-upload input-right-icon" data-file data-field="cover" data-type="gif,png,jpg,jpeg"></a>
</div>
</div>
<label class="layui-form-item relative block">
<span class="help-label"><b>文章标题</b>Article Name</span>
<span class="help-label"><b>文章标题</b>News Title</span>
<input class="layui-input" name="name" placeholder="请输入文章标题" required value='{$vo.name|default=""}'>
</label>
<label class="layui-form-item relative block">
<span class="help-label"><b>简介描述</b>Article Remark</span>
<textarea class="layui-textarea" name="remark" placeholder="请输入简介描述" required>{$vo.remark|default=''}</textarea>
</label>
<div class="layui-form-item label-required-prev">
<span class="help-label"><b>富文本内容</b>Article Content</span>
<span class="help-label"><b>文章内容</b>News Content</span>
<label class="relative block">
<textarea class="layui-textarea" name="content" placeholder="请输入文章内容">{$vo.content|default=''}</textarea>
<textarea class="layui-hide" name="content" placeholder="请输入文章内容">{$vo.content|default=''}</textarea>
</label>
</div>
<div class="hr-line-dashed"></div>
{notempty name='vo.id'}<input name='id' type='hidden' value='{$vo.id}'>{/notempty}
{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>
@ -57,7 +50,8 @@
<script>
require(['ckeditor'], function () {
window.createEditor('[name=content]', {height: 300});
$('input[name="cover"]').uploadOneImage();
window.createEditor('[name=content]', {height: 350});
});
</script>
{/block}
{/block}

View File

@ -1,78 +1,104 @@
{extend name="../../admin/view/main"}
{extend name='../../admin/view/table'}
{block name="button"}
<!--{if auth("add")}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-open='{:url("add")}'>添加文章</button>
<button data-open='{:url("add")}' class='layui-btn layui-btn-sm layui-btn-primary'>添加文章</button>
<!--{/if}-->
<!--{if auth("remove")}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-action='{:url("remove")}' data-confirm="确定要删除这些文章吗?" data-rule="id#{key}">删除文章</button>
<!--{/if}-->
<!--{if auth("news.mark/index")}-->
<button class='layui-btn layui-btn-sm layui-btn-primary' data-modal='{:url("news.mark/index")}' data-title="标签管理" data-width="900px">标签管理</button>
<button data-action='{:url("remove")}' data-table-id="NewsTable" data-rule="id#{id}" data-confirm="确定要批量删除文章吗?" class='layui-btn layui-btn-sm layui-btn-primary'>批量删除</button>
<!--{/if}-->
{/block}
{block name='content'}
<div class="think-box-shadow">
{include file='news/item/index_search'}
<table class="layui-table margin-top-10" lay-skin="line">
{notempty name='list'}
<thead>
<tr>
<th class='list-table-check-td think-checkbox'>
<label><input data-auto-none data-check-target='.list-check-box' type='checkbox'></label>
</th>
<th class='list-table-sort-td'>
<button class="layui-btn layui-btn-xs" data-reload type="button"> </button>
</th>
<th class="text-left nowrap">文章编号</th>
<th class="text-left nowrap">文章名称</th>
<th class="text-left nowrap">搜索标签</th>
<th class="text-left nowrap">文章状态</th>
<th class="text-left nowrap">创建时间</th>
<th class="text-left nowrap"></th>
</tr>
</thead>
{/notempty}
<tbody>
{foreach $list as $key=>$vo}
<tr>
<td class='list-table-check-td think-checkbox'>
<label><input class="list-check-box" type='checkbox' value='{$vo.id}'></label>
</td>
<td class='list-table-sort-td'>
<label><input class="list-sort-input" data-action-blur="{:sysuri()}" data-loading="false" data-value="id#{$vo.id};action#sort;sort#{value}" value="{$vo.sort}"></label>
</td>
<td class="text-left nowrap">{$vo.code|default=''}</td>
<td class="text-left nowrap">{$vo.name|default=''}</td>
<td class="text-left nowrap">{notempty name='vo.mark'}{foreach $vo.mark as $tag}<span class="margin-right-5 layui-badge layui-bg-cyan">{$tag}</span>{/foreach}{/notempty}<br></td>
<td class="text-left nowrap">{if $vo.status eq 0}<span class="color-red">已禁用</span>{elseif $vo.status eq 1}<span class="color-green">已激活</span>{/if}</td>
<td class="text-left nowrap">{$vo.create_at|format_datetime}</td>
<td class='text-left nowrap'>
<!--{if auth("edit")}-->
<a class="layui-btn layui-btn-sm" data-open="{:url('edit')}?id={$vo.id}"> </a>
<!--{/if}-->
<!--{if auth("state") and $vo.status eq 1}-->
<a class="layui-btn layui-btn-sm layui-btn-warm" data-action="{:url('state')}" data-value="id#{$vo.id};status#0"> </a>
<!--{/if}-->
<!--{if auth("state") and $vo.status eq 0}-->
<a class="layui-btn layui-btn-sm layui-btn-warm" data-action="{:url('state')}" data-value="id#{$vo.id};status#1"> </a>
<!--{/if}-->
<!--{if auth("remove")}-->
<a class="layui-btn layui-btn-sm layui-btn-danger" data-action="{:url('remove')}" data-confirm="确定要删除该文章吗?" data-value="id#{$vo.id}"> </a>
<!--{/if}-->
</td>
</tr>
{/foreach}
</tbody>
</table>
{empty name='list'}<span class="notdata">没有记录哦</span>{else}{$pagehtml|raw|default=''}{/empty}
{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}
<li data-open="{:url('index')}?type={$k}" class="layui-this color-green">{$v}</li>
{else}
<li data-open="{:url('index')}?type={$k}">{$v}</li>
{/if}{/foreach}
</ul>
<div class="layui-tab-content">
{include file='news/item/index_search'}
<table id="NewsTable" data-url="{:sysuri()}" data-target-search="form.form-search"></table>
</div>
</div>
{/block}
{block name='script'}
<script>
$(function () {
// 初始化表格组件
$('#NewsTable').layTable({
even: true, height: 'full',
sort: {field: 'sort desc,code', type: 'desc'},
where: {type: '{$type|default="index"}'},
cols: [[
{checkbox: true, fixed: true},
{field: 'sort', title: '排序权重', align: 'center', width: 100, sort: true, templet: '#SortInputTpl'},
{field: 'id', title: 'ID', align: "center", width: 80},
/* {notempty name='marks'} */
{
field: 'mark', title: '文章标签', align: 'left', minWidth: 100, templet: function (d) {
return (d.html = ''), d.mark.forEach(function (val) {
d.html += '<span class="layui-badge layui-bg-blue">' + val + '</span>';
}), d.html;
}
},
/* {/marks} */
{
field: 'cover', title: '图片', width: 60, align: 'center', templet: function (d) {
if (!d.cover) return '';
return layui.laytpl('<div data-tips-image data-tips-hover class="headimg headimg-xs headimg-no margin-0" data-lazy-src="{{d.cover}}"></div>').render(d);
}
},
{field: 'name', title: '文章标题', align: 'left', minWidth: 140},
{field: 'num_read', title: '阅读数', align: 'center', minWidth: 80, sort: true, style: 'color:blue;font-size:16px'},
{field: 'status', title: '状态', align: 'center', minWidth: 110, templet: '#StatusSwitchTpl'},
{field: 'create_at', title: '创建时间', align: 'center', minWidth: 170, sort: true},
{toolbar: '#toolbar', title: '操作面板', align: 'center', minWidth: 160, fixed: 'right'},
]]
});
// 数据状态切换操作
layui.form.on('switch(StatusSwitch)', function (obj) {
var data = {id: obj.value, status: obj.elem.checked > 0 ? 1 : 0};
$.form.load("{:url('state')}", data, 'post', function (ret) {
if (ret.code < 1) $.msg.error(ret.info, 3, function () {
$('#NewsTable').trigger('reload');
}); else {
$('#NewsTable').trigger('reload');
}
return false;
}, false);
});
});
</script>
<!-- 列表排序权重模板 -->
<script type="text/html" id="SortInputTpl">
<input type="number" min="0" data-blur-number="0" data-action-blur="{:sysuri()}" data-value="id#{{d.id}};action#sort;sort#{value}" data-loading="false" value="{{d.sort}}" class="layui-input text-center">
</script>
<!-- 数据状态切换模板 -->
<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':''}}>
<!--{else}-->
{{d.status ? '<b class="color-green">已启用</b>' : '<b class="color-red">已禁用</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>
<!--{/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>
<!--{/if}-->
</script>
{/block}

View File

@ -1,6 +1,23 @@
<fieldset>
<legend>条件搜索</legend>
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-form-pane form-search" method="get" onsubmit="return false">
<!-- {notempty name='marks'} -->
<div class="layui-form-item layui-inline">
<label class="layui-form-label">文章标签</label>
<div class="layui-input-inline">
<select name="mark" lay-search class="layui-select">
<option value=''>-- 文章标签 --</option>
{foreach $marks as $mark}{if isset($get.mark) and $mark eq $get.mark}
<option selected value="{$mark.name}">{$mark.name}</option>
{else}
<option value="{$mark.name}">{$mark.name}</option>
{/if}{/foreach}
</select>
</div>
</div>
<!-- {/notempty} -->
<div class="layui-form-item layui-inline">
<label class="layui-form-label">文章标题</label>
<label class="layui-input-inline">
@ -8,28 +25,6 @@
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">搜索标签</label>
<label class="layui-input-inline">
<input class="layui-input" name="mark" placeholder="请输入搜索标签" value="{$get.mark|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">使用状态</label>
<div class="layui-input-inline">
<select class="layui-select" name="status">
<option value=''>-- 全部 --</option>
{foreach ['显示禁止的文章', '显示正常的文章'] as $k=>$v}
{if $k.'' eq input('status')}
<option selected value="{$k}">{$v}</option>
{else}
<option value="{$k}">{$v}</option>
{/if}{/foreach}
</select>
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">创建时间</label>
<label class="layui-input-inline">

View File

@ -1,41 +1,87 @@
{extend name="../../admin/view/full"}
{block name="content"}
<div class="iframe-pagination notfooter">
<fieldset>
<legend>条件搜索</legend>
<form action="{:sysuri()}" id="NewsTableSearch" autocomplete="off" class="layui-form layui-form-pane form-search" method="get" onsubmit="return false">
{block name='content'}
<div class="iframe-pagination">
{include file='news/item/select_search'}
<table class="layui-table" lay-skin="line">
{notempty name='list'}
<thead>
<tr>
<th>文章标题</th>
<th>文章状态</th>
<th>创建时间</th>
<th></th>
</tr>
</thead>
{/notempty}
<tbody>
{foreach $list as $key => $vo}
<tr>
<td class="nowrap">{$vo.name|default=''}</td>
<td>{if $vo.status eq 0}<span class="color-red">已禁用</span>{elseif $vo.status eq 1}<span class="color-green">已激活</span>{/if}</td>
<td>{$vo.create_at|format_datetime}</td>
<td class='text-right'><a class="layui-btn layui-btn-sm layui-btn-normal" data-item="{$vo.code}">选择文章</a></td>
</tr>
{/foreach}
</tbody>
</table>
{empty name='list'}<span class="notdata">没有记录哦</span>{else}{$pagehtml|raw|default=''}{/empty}
<!-- {notempty name='marks'} -->
<div class="layui-form-item layui-inline">
<label class="layui-form-label">文章标签</label>
<div class="layui-input-inline">
<select name="mark" lay-search class="layui-select">
<option value=''>-- 文章标签 --</option>
{foreach $marks as $mark}{if isset($get.mark) and $mark eq $get.mark}
<option selected value="{$mark.name}">{$mark.name}</option>
{else}
<option value="{$mark.name}">{$mark.name}</option>
{/if}{/foreach}
</select>
</div>
</div>
<!-- {/notempty} -->
<div class="layui-form-item layui-inline">
<label class="layui-form-label">文章标题</label>
<label class="layui-input-inline">
<input class="layui-input" name="name" placeholder="请输入文章标题" value="{$get.name|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">创建时间</label>
<label class="layui-input-inline">
<input class="layui-input" data-date-range name="create_at" placeholder="请选择创建时间" value="{$get.create_at|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
</div>
</form>
</fieldset>
<table id="NewsTable" data-url="{:sysuri()}" data-target-search="#NewsTableSearch"></table>
</div>
{/block}
{block name='script'}
<script>
$(function () {
$.form.reInit(), $('[data-item]').on('click', function () {
top.setItemValue(this.getAttribute('data-item') || '');
parent.layer.close(parent.layer.getFrameIndex(window.name));
// 初始化表格组件
$('#NewsTable').layTable({
even: true, height: 'full',
sort: {field: 'sort desc,id', type: 'desc'},
cols: [[
{field: 'id', title: 'ID', align: 'center', width: 60, sort: true},
/* {notempty name='marks'} */
{
field: 'mark', title: '文章标签', align: 'left', minWidth: 100, templet: function (d) {
return (d.html = ''), d.mark.forEach(function (val) {
d.html += '<span class="layui-badge layui-bg-blue">' + val + '</span>';
}), d.html;
}
},
/* {/marks} */
{field: 'name', title: '文章标题', align: 'left', minWidth: 140},
{field: 'num_read', title: '阅读数', align: 'center', width: 85, sort: true, style: 'color:blue;font-size:16px'},
{field: 'status', title: '状态', align: 'center', width: 80, templet: '#StatusSwitchTpl'},
{field: 'create_at', title: '创建时间', align: 'center', width: 170, sort: true},
{toolbar: '#toolbar', title: '操作', align: 'center', width: 100}
]]
}).trigger('tool', function (item) {
window.setItemValue(item.data.id, item.data.name);
item.tr.parents('div.layui-layer-page').find('a.layui-layer-close').trigger('click');
});
});
</script>
<!-- 操作工具条模板 -->
<script type="text/html" id="toolbar">
<a class="layui-btn layui-btn-sm" lay-event="select"> </a>
</script>
<!-- 数据状态切换模板 -->
<script type="text/html" id="StatusSwitchTpl">
{{d.status ? '<b class="color-green">已激活</b>' : '<b class="color-red">已禁用</b>'}}
</script>
{/block}

View File

@ -1,36 +0,0 @@
<fieldset>
<legend>条件搜索</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-input-inline">
<input class="layui-input" name="name" placeholder="请输入文章标题" value="{$get.name|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">使用状态</label>
<div class="layui-input-inline">
<select class="layui-select" name="status">
{foreach [''=>'-- 全部 --','0'=>'显示禁止的文章','1'=>'显示正常的文章'] as $k=>$v}
{if $k.'' eq input('status')}
<option selected value="{$k}">{$v}</option>
{else}
<option value="{$k}">{$v}</option>
{/if}{/foreach}
</select>
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">创建时间</label>
<label class="layui-input-inline">
<input class="layui-input" data-date-range name="create_at" placeholder="请选择创建时间" value="{$get.create_at|default=''}">
</label>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
</div>
</form>
</fieldset>

View File

@ -2,7 +2,7 @@
{block name="content"}
{include file='shop/goods/formstyle'}
<form autocomplete="off" class='layui-form layui-card' data-auto="true" id="GoodsForm" method="post" onsubmit="return false;">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card" id="GoodsForm">
<div class="layui-card-body padding-40 padding-bottom-20">
<!--{notempty name='marks'}-->

View File

@ -1,4 +1,4 @@
<form action="{:sysuri()}?code={$get.code|default=''}" autocomplete="off" class="layui-form layui-card" data-auto="true" method="post">
<form action="{:sysuri()}?code={$get.code|default=''}" class="layui-form layui-card" data-auto="true" method="post">
<div class="layui-card-body padding-left-40">
<div class="layui-form-item relative block">

View File

@ -1,4 +1,4 @@
<form action="{:sysuri()}" data-table-id="TagsData" class="layui-form layui-card" data-auto="true" method="post">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card" data-table-id="TagsData">
<div class="layui-card-body padding-left-40">
<label class="layui-form-item relative block">

View File

@ -1,4 +1,4 @@
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-card" data-auto="true" method="post">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card-body padding-left-40">

View File

@ -1,18 +1,18 @@
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-card margin-bottom-0" data-auto="true" method="post">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card-body padding-left-40">
<label class="layui-form-item relative block">
<span class="color-green font-w7 label-required-prev">发货人姓名</span>
<span class="help-label"><b>发货人姓名</b></span>
<input class="layui-input" name="name" placeholder="请输入发货人姓名" required value="{$vo.name|default=''}">
</label>
<label class="layui-form-item relative block">
<span class="color-green font-w7 label-required-prev">发货人手机</span>
<span class="help-label"><b>发货人手机</b></span>
<input class="layui-input" name="phone" placeholder="请输入发货人手机" required value="{$vo.phone|default=''}">
</label>
<div class="layui-form-item relative block">
<span class="color-green font-w7 label-required-prev">发货所在区域</span>
<div class="layui-form-item label-required-prev">
<span class="help-label"><b>发货所在区域</b></span>
<div class="layui-row layui-col-space10">
<label class="layui-col-xs4"><select class="layui-select block full-width" lay-ignore name="province"></select></label>
<label class="layui-col-xs4"><select class="layui-select block full-width" lay-ignore name="city"></select></label>
@ -21,7 +21,7 @@
</div>
<label class="layui-form-item relative block">
<span class="color-green font-w7 label-required-prev">发货详细地址</span>
<span class="help-label"><b>发货详细地址</b></span>
<textarea class="layui-textarea" name="content" placeholder="请输入发货详细地址" required>{$vo.content|default=""}</textarea>
</label>
</div>

View File

@ -1,4 +1,4 @@
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-card margin-bottom-0 overhide" data-auto="true" method="post">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card-body padding-left-40">
<fieldset>
<legend><span class="layui-badge layui-bg-cyan">收货信息</span></legend>

View File

@ -1,4 +1,4 @@
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-card overhide" data-auto="true" method="post">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card-body padding-left-40">
<fieldset class="layui-form-item">
@ -11,13 +11,11 @@
</div>
<div class="layui-col-xs9">
<label class="layui-form-item relative block">
<span class="color-green font-w7">微信昵称</span>
<span class="color-desc margin-left-5">Wechat Nickname</span>
<span class="help-label"><b>微信昵称</b>Wechat Nickname</span>
<input class="layui-input layui-bg-gray" data-bind="nickname" placeholder="请使用微信扫码登录" readonly value="{$user.nickname|default=''}">
</label>
<label class="relative block">
<span class="color-green font-w7">微信标识</span>
<span class="color-desc margin-left-5">Wechat Openid</span>
<span class="help-label"><b>微信标识</b>Wechat Openid</span>
<input class="layui-input layui-bg-gray" data-bind="openid" placeholder="请使用微信扫码登录" readonly value="{$user['openid1']?:$user['openid2']}">
</label>
</div>
@ -25,28 +23,24 @@
</fieldset>
<label class="layui-form-item layui-hide">
<span class="color-green font-w7">充值单号</span>
<span class="color-desc margin-left-5">Code</span>
<span class="help-label"><b>充值单号</b>Code</span>
<input class="layui-input layui-bg-gray" name="code" placeholder="请输入充值单号" readonly required value="{$vo.code|default=''}">
</label>
<label class="layui-form-item layui-hide">
<span class="color-green font-w7">余额充值名称</span>
<span class="color-desc margin-left-5">Name</span>
<span class="help-label"><b>余额充值名称</b>Name</span>
<input class="layui-input" maxlength="100" name="name" placeholder="请输入余额充值名称" required value="{$vo.name|default='后台余额充值'}">
</label>
<label class="layui-form-item relative block">
<span class="color-green font-w7">充值账户余额</span>
<span class="color-desc margin-left-5">Amount</span>
<span class="help-label"><b>充值账户余额</b>Amount</span>
<input class="layui-input" data-blur-number="2" data-value-max="999999999.99" maxlength="12" name="amount" placeholder="请输入充值账户余额" required value="{$vo.amount|default='0.00'}">
<span class="help-block">请输入要充值的金额,充值后可以使用此余额购买商品</span>
</label>
<div class="layui-form-item">
<span class="color-green font-w7 label-required-prev">升级用户等级</span>
<span class="color-desc margin-left-5">Upgrade</span>
<select class="layui-select" lay-filter="upgrade" name="upgrade">
<div class="layui-form-item label-required-prev">
<span class="help-label"><b>升级用户等级</b>Upgrade</span>
<select class="layui-select" name="upgrade" lay-filter="upgrade">
<option value="0">-- 不升级 --</option>
{foreach $upgrades as $upgrade}{if isset($vo.upgrade) and $vo.upgrade eq $upgrade.number}
<option selected value="{$upgrade.number|default=0}">升级到 [ VIP{$upgrade.number|default='0'} ] {$upgrade.name|default=''}</option>
@ -58,8 +52,7 @@
</div>
<div class="layui-form-item relative block">
<span class="color-green font-w7">余额充值备注</span>
<span class="color-desc margin-left-5">Remark</span>
<span class="help-label"><b>余额充值备注</b>Remark</span>
<label class="relative block">
<textarea class="layui-textarea" name="remark" placeholder="请输入余额充值备注">{$vo.remark|default=''}</textarea>
</label>

View File

@ -5,12 +5,12 @@
注意:短信接口配置的参数不能随意修改,会影响到用户注册发送短信通知功能,若有需要调整请联系客服!
</div>
<div class="think-box-shadow">
<form action="{$request->url()}" autocomplete="off" class='layui-form layui-card shadow-none' data-auto="true" method="post" onsubmit="return false;" style="width:800px">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card" style="width:800px">
<div class="layui-card-body padding-left-40">
<label class="layui-form-item block relative">
<span class="color-green font-w7 margin-right-10">接口查询状态</span><span class="nowrap color-desc">Status</span>
<span class="help-label"><b>接口查询状态</b>Status</span>
{if empty($result.0)}
<span class="layui-input layui-bg-gray color-red">{$result.1|default=''}</span>
{elseif $result.0 eq 1}
@ -22,25 +22,25 @@
</label>
<label class="layui-form-item block relative">
<span class="color-green font-w7 margin-right-10">短信授权账号</span><span class="nowrap color-desc">Username</span>
<span class="help-label"><b>短信授权账号</b>Username</span>
<input class="layui-input" name="zt.username" placeholder="请输入短信授权账号" required value="{:sysconf('zt.username')}">
<span class="help-block">短信授权账号,可以联系 18122377655 获取账号与密码</span>
</label>
<label class="layui-form-item block relative">
<span class="color-green font-w7 margin-right-10">短信授权密码</span><span class="nowrap color-desc">Password</span>
<span class="help-label"><b>短信授权密码</b>Password</span>
<input class="layui-input" name="zt.password" placeholder="请输入短信授权密码" required value="{:sysconf('zt.password')}">
<span class="help-block">短信授权密码,可以联系 18122377655 获取账号与密码</span>
</label>
<label class="layui-form-item block relative">
<span class="color-green font-w7 margin-right-10">短信发送安全码</span><span class="nowrap color-desc">SecureCode</span>
<span class="help-label"><b>短信发送安全码</b>SecureCode</span>
<input class="layui-input" name="zt.secure_code" placeholder="请输入短信发送安全码" required value="{:sysconf('zt.secure_code')}">
<span class="help-block">短信发送安全码,调用接口发短信时需要传入此参数</span>
</label>
<label class="layui-form-item block relative">
<span class="color-green font-w7 margin-right-10">用户注册通知模板</span><span class="nowrap color-desc">RegisterTemplate</span>
<span class="help-label"><b>用户注册通知模板</b>RegisterTemplate</span>
<textarea class="layui-textarea" name="zt.tplcode_register">{:sysconf('zt.tplcode_register')}</textarea>
<span class="help-block">用户注册短信模板,验证码变量使用 {code} 代替</span>
</label>

View File

@ -1,7 +1,7 @@
{extend name="../../admin/view/main"}
{block name='content'}
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-card" data-auto="true" method="post">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card-body" style="min-width:1000px">
<!-- 结算方式 开始 -->

View File

@ -1,22 +1,22 @@
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-card" data-auto="true" method="post">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card-body padding-left-40">
<div class="layui-row layui-form-item layui-col-space15">
<label class="layui-col-xs3">
<span class="color-green font-w7">提现单号</span>
<span class="help-label"><b>提现单号</b></span>
<input class='layui-input layui-disabled layui-bg-gray' disabled value='{$vo.code|default="-"}'>
</label>
<label class="layui-col-xs3">
<span class="color-green font-w7">提现金额</span>
<span class="help-label"><b>提现金额</b></span>
<input class='layui-input layui-disabled layui-bg-gray' disabled value='{$vo.amount|default="0.00"}'>
</label>
<label class="layui-col-xs3">
<span class="color-green font-w7">提现手续费</span>
<span class="help-label"><b>提现手续费</b></span>
<input class='layui-input layui-disabled layui-bg-gray' disabled value='{$vo.charge_amount|default="0.00"}'>
</label>
<label class="layui-col-xs3">
<span class="color-green font-w7 label-required-prev">提现方式</span>
<span class="help-label"><b>提现方式</b></span>
<input class='layui-input layui-disabled layui-bg-gray' disabled value='{$vo.type|default="-"}'>
</label>
</div>

View File

@ -23,7 +23,7 @@
}
</style>
<form action="{:sysuri()}" class="layui-form layui-card" data-auto="true" method="post">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card-body padding-left-40">
<div class="layui-form-item relative block">
@ -40,15 +40,13 @@
</div>
<label class="layui-form-item relative block">
<span class="color-green font-w7 label-required-prev">提现手续费配置</span>
<span class="color-desc margin-left-5">Transfer Charge</span>
<input class='layui-input' data-blur-number="4" data-value-max="50.0000" data-value-min="0.0000" name="charge" value='{$data.charge|default="0.0000"}'>
<span class="help-label"><b>提现手续费配置</b>Transfer Charge</span>
<input class='layui-input' required data-blur-number="4" data-value-max="50.0000" data-value-min="0.0000" name="charge" value='{$data.charge|default="0.0000"}'>
<span class='help-block'>请输入提现金额的百分比,费率的取值范围为 0.0000% - 50.0000%</span>
</label>
<div class="layui-form-item">
<span class="color-green font-w7 label-required-prev">提现方式状态配置</span>
<span class="color-desc margin-left-5">Transfer Types</span>
<div class="layui-form-item label-required-prev">
<span class="help-label"><b>提现方式状态配置</b>Transfer Types</span>
<table class="layui-table payment-type" lay-skin="nob">
<thead>
<tr>
@ -115,8 +113,7 @@
</div>
<div class="layui-form-item relative block">
<span class="color-green font-w7">用户提现描述内容</span>
<span class="color-desc margin-left-5">Transfer Remark</span>
<span class="help-label"><b>用户提现描述内容</b>Transfer Remark</span>
<label class="relative block">
<textarea class="layui-textarea" name="remark" placeholder="请输入用户提现描述内容">{$data.remark|default=''}</textarea>
</label>

View File

@ -1,9 +1,9 @@
<form action="{:sysuri()}" autocomplete="off" class="layui-form layui-card" data-auto="true" method="post">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card-body padding-left-40">
<div class="layui-form-item label-required-prev">
<span class="help-label"><b>绑定公众号</b>Bind WeChat Type</span>
<div class="layui-textarea" style="min-height:unset">
<div class="layui-textarea help-checks">
{php} $data['wechat_type'] = $data['wechat_type'] ?? 'normal'; {/php}
{foreach ['normal'=>'兼容模式', 'wxapp'=>'微信小程序', 'wechat'=>'微信服务号'] as $k=>$v}
{if $k eq $data.wechat_type}
@ -22,20 +22,19 @@
</label>
<label class="layui-form-item block relative">
<span class="color-green font-w7">微信商户密钥</span>
<span class="color-desc margin-left-5">WeChat Payment Secret Key</span>
<span class="help-label"><b>微信商户密钥</b>WeChat Payment Secret Key</span>
<input class="layui-input" maxlength="32" name="wechat_mch_key" pattern=".{32}" placeholder="请输入32位微信商户密钥必填" required value="{$data.wechat_mch_key|default=''}">
<span class="help-block">微信商户密钥,需要在微信商户平台操作设置密码并获取密钥,建议定期更换密钥</span>
</label>
<label class="layui-form-item block relative">
<span class="color-green font-w7">微信商户密钥文件内容</span><span class="nowrap color-desc"> 需要填写文件的全部内容 </span>
<span class="help-label"><b>微信商户密钥文件内容</b> 需要填写文件的全部内容 </span>
<textarea class="layui-textarea" name="wechat_mch_key_text" placeholder="请输入微信商户 KEY 密钥内容" required>{$data.wechat_mch_key_text|default=''}</textarea>
<span class="help-block">从商户平台上下载支付证书,解压并取得其中的 apiclient_key.pem 用记事本打开并复制文件内容填至此处</span>
</label>
<label class="layui-form-item block relative">
<span class="color-green font-w7">微信商户证书文件内容</span><span class="nowrap color-desc"> 需要填写文件的全部内容 </span>
<span class="help-label"><b>微信商户证书文件内容</b> 需要填写文件的全部内容 </span>
<textarea class="layui-textarea" name="wechat_mch_cert_text" placeholder="请输入微信商户 CERT 证书内容" required>{$data.wechat_mch_cert_text|default=''}</textarea>
<span class="help-block">从商户平台上下载支付证书,解压并取得其中的 apiclient_cert.pem 用记事本打开并复制文件内容填至此处</span>
</label>

View File

@ -37,7 +37,7 @@
<div class='mobile-body' data-iframe-box></div>
</div>
<div class="keys-container inline-block absolute margin-left-10 margin-right-15">
<form class="layui-form" onsubmit="return false" autocomplete="off" data-auto="true" action="{:request()->url()}" method="post">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card relative">
<div class="layui-card-header layui-bg-gray text-center">编辑关键字</div>
<div class="layui-card-body">

View File

@ -1,4 +1,4 @@
<form onsubmit="return false;" data-auto="true" method="post" class='layui-form layui-card shadow-none' autocomplete="off">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card-header border-0">
<div class="layui-bg-gray padding-col-20 border-radius-5 layui-elip">

View File

@ -1,4 +1,4 @@
<form onsubmit="return false;" data-auto="true" method="post" class='layui-form layui-card shadow-none' autocomplete="off">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card-header border-0">
<div class="layui-bg-gray padding-col-20 border-radius-5 layui-elip">

View File

@ -9,7 +9,7 @@
{block name="content"}
<div class="think-box-shadow">
<div class="layui-anim layui-anim-fadein padding-top-20" style="width:850px">
<form onsubmit="return false;" action="{:url('payment_save')}" data-auto="true" method="post" class='layui-form layui-card shadow-none' autocomplete="off" lay-filter="payment">
<form action="{:url('payment_save')}" method="post" data-auto="true" class='layui-form layui-card shadow-none' lay-filter="payment">
<div class="layui-card-header border-0">
<div class="layui-bg-gray padding-col-20 border-radius-5">

View File

@ -35,7 +35,7 @@
<div class='mobile-body' data-iframe-box></div>
</div>
<div class="keys-container inline-block absolute margin-left-10 margin-right-15">
<form class="layui-form" onsubmit="return false" autocomplete="off" data-auto="true" action="{:request()->url()}" method="post">
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card">
<div class="layui-card relative shadow-none">
<div class="layui-card-header layui-bg-gray text-center">编辑关键字</div>
<div class="layui-card-body">

View File

@ -1,82 +0,0 @@
/********************************************************
*** 加载脚本文件 ***
<script src="pcasunzip.js"></script>
*** 省市联动 ***
new PCAS("Province","City")
new PCAS("Province","City","吉林省")
new PCAS("Province","City","吉林省","吉林市")
*** 省市区联动 ***
new PCAS("Province","City","Area")
new PCAS("Province","City","Area","吉林省")
new PCAS("Province","City","Area","吉林省","松原市")
new PCAS("Province","City","Area","吉林省","松原市","宁江区")
省、市、地区对象取得的值均为实际值。
注:省、市、地区提示信息选项的值为""(空字符串)
*********************************************************/
SPT = window.SPT || "-省份-";
SCT = window.SCT || "-城市-";
SAT = window.SAT || "-地区-";
SWT = window.SWT || 0; // 提示文字 0:不显示 1:显示
function PCAS() {
this.SelP = document.getElementsByName(arguments[0])[0];
this.SelC = document.getElementsByName(arguments[1])[0];
this.SelA = document.getElementsByName(arguments[2])[0];
this.DefP = this.SelA ? arguments[3] : arguments[2];
this.DefC = this.SelA ? arguments[4] : arguments[3];
this.DefA = this.SelA ? arguments[5] : arguments[4];
if (this.SelP) this.SelP.PCA = this;
if (this.SelC) this.SelC.PCA = this;
if (this.SelA) this.SelA.PCA = this;
if (this.SelP && this.SelC) {
this.SelP.onchange = function () {
PCAS.SetC(this.PCA)
};
if (this.SelA) this.SelC.onchange = function () {
PCAS.SetA(this.PCA)
};
}
PCAS.init(this).SetP(this)
}
PCAS.init = function (PCA) {
PCA.PCAP = [], PCA.PCAC = [], PCA.PCAA = [], PCA.PCAD = "__STRING__";
if (SWT) PCA.PCAD = SPT + "$" + SCT + "," + SAT + "#" + PCA.PCAD;
PCA.PCAD.split("#").forEach(function (VAL1, ID1) {
PCA.PCAP[ID1] = VAL1.split("$")[0], PCA.PCAC[ID1] = [], PCA.PCAA[ID1] = [];
VAL1.split("$")[1].split("|").forEach(function (VAL2, ID2) {
PCA.PCAC[ID1].push((PCA.PCAR = VAL2.split(",")).shift()), PCA.PCAA[ID1][ID2] = PCA.PCAR;
});
});
return this;
};
PCAS.SetP = function (PCA) {
PCA.PCAP.forEach(function (VAL, IDX) {
PCA.PCAT = PCA.PCAV = VAL;
if (PCA.PCAT === SPT) PCA.PCAV = "";
PCA.SelP.options.add(new Option(PCA.PCAT, PCA.PCAV));
if (PCA.DefP === PCA.PCAV) PCA.SelP[IDX].selected = true
}), PCA.SelC ? PCAS.SetC(PCA) : $(PCA.SelP).trigger('change');
};
PCAS.SetC = function (PCA) {
PCA.SelC.length = 0;
PCA.PCAC[PCA.SelP.selectedIndex].forEach(function (VAL, IDX) {
PCA.PCAT = PCA.PCAV = VAL;
if (PCA.PCAT === SCT) PCA.PCAV = "";
PCA.SelC.options.add(new Option(PCA.PCAT, PCA.PCAV));
if (PCA.DefC === PCA.PCAV) PCA.SelC[IDX].selected = true
}), PCA.SelA ? PCAS.SetA(PCA) : $(PCA.SelC).trigger('change');
};
PCAS.SetA = function (PCA) {
PCA.SelA.length = 0;
PCA.PCAA[PCA.SelP.selectedIndex][PCA.SelC.selectedIndex].forEach(function (VAL, IDX) {
PCA.PCAT = PCA.PCAV = VAL;
if (PCA.PCAT === SAT) PCA.PCAV = "";
PCA.SelA.options.add(new Option(PCA.PCAT, PCA.PCAV));
if (PCA.DefA === PCA.PCAV) PCA.SelA[IDX].selected = true
}), $(PCA.SelA).trigger('change')
};

View File

@ -1,23 +1,24 @@
<?php
header('content-type:application/json');
PHP_SAPI === 'cli' or die('Can only run in CLI mode.');
$items = [];
// 从腾讯地址接口获取数据
$url = 'https://apis.map.qq.com/ws/district/v1/list?key=AVDBZ-VXMC6-VD2SU-M7DX2-TGSV7-WVF3U';
$result = json_decode(file_get_contents($url), true)['result'];
$items = [];
foreach ($result[0] as $pro) {
$items[$pro['id']] = ['name' => $pro['fullname'], 'list' => []];
}
foreach ($result[1] as $city) {
$pkey = substr($city['id'], 0, 2) . '0000';
if (substr($city['id'], 4, 2) > 0) {
$ckey = substr($city['id'], 0, 4) . '00';
foreach ($result[1] as $prov) {
$pkey = substr($prov['id'], 0, 2) . '0000';
if (substr($prov['id'], 4, 2) > 0) {
$ckey = substr($prov['id'], 0, 4) . '00';
$items[$pkey]['list'][$ckey]['name'] = $items[$pkey]['name'];
$items[$pkey]['list'][$ckey]['list'][$city['id']] = ['name' => $city['fullname'], 'list' => []];
$items[$pkey]['list'][$ckey]['list'][$prov['id']] = ['name' => $prov['fullname'], 'list' => []];
} else {
$items[$pkey]['list'][$city['id']] = ['name' => $city['fullname'], 'list' => []];
$items[$pkey]['list'][$prov['id']] = ['name' => $prov['fullname'], 'list' => []];
}
}
@ -28,18 +29,110 @@ foreach ($result[2] as $area) {
}
$data = [];
foreach ($items as $citys) {
foreach ($items as &$prov) {
$lines = [];
foreach ($citys['list'] as $area) {
$lines[] = $area['name'] . ',' . join(',', array_column($area['list'], 'name'));
$prov['list'] = array_values($prov['list']);
foreach ($prov['list'] as &$city) {
$city['list'] = array_values($city['list']);
$lines[] = $city['name'] . ',' . join(',', array_column($city['list'], 'name'));
}
$data[] = $citys['name'] . '$' . join('|', $lines);
$data[] = $prov['name'] . '$' . join('|', $lines);
}
$filename = dirname(__DIR__) . '/pcasunzips.js';
$content = str_replace('__STRING__', join('#', $data), file_get_contents(__DIR__ . '/area.js'));
$jsonFile = __DIR__ . '/data.json';
$scriptFile = dirname(__DIR__) . '/pcasunzips.js';
$jsonContent = json_encode(array_values($items), JSON_UNESCAPED_UNICODE);
$scriptContent = str_replace('__STRING__', join('#', $data), <<<EOL
/********************************************************
*** 加载脚本文件 ***
<script src="pcasunzip.js"></script>
if (file_put_contents($filename, $content)) {
*** 省市联动 ***
new PCAS("Province","City")
new PCAS("Province","City","吉林省")
new PCAS("Province","City","吉林省","吉林市")
*** 省市区联动 ***
new PCAS("Province","City","Area")
new PCAS("Province","City","Area","吉林省")
new PCAS("Province","City","Area","吉林省","松原市")
new PCAS("Province","City","Area","吉林省","松原市","宁江区")
省、市、地区对象取得的值均为实际值。
注:省、市、地区提示信息选项的值为""(空字符串)
*********************************************************/
SPT = window.SPT || "-省份-";
SCT = window.SCT || "-城市-";
SAT = window.SAT || "-地区-";
SWT = window.SWT || 0; // 提示文字 0:不显示 1:显示
function PCAS() {
this.SelP = document.getElementsByName(arguments[0])[0];
this.SelC = document.getElementsByName(arguments[1])[0];
this.SelA = document.getElementsByName(arguments[2])[0];
this.DefP = this.SelA ? arguments[3] : arguments[2];
this.DefC = this.SelA ? arguments[4] : arguments[3];
this.DefA = this.SelA ? arguments[5] : arguments[4];
if (this.SelP) this.SelP.PCA = this;
if (this.SelC) this.SelC.PCA = this;
if (this.SelA) this.SelA.PCA = this;
if (this.SelP && this.SelC) {
this.SelP.onchange = function () {
PCAS.SetC(this.PCA)
};
if (this.SelA) this.SelC.onchange = function () {
PCAS.SetA(this.PCA)
};
}
PCAS.init(this).SetP(this)
}
PCAS.init = function (PCA) {
PCA.PCAP = [], PCA.PCAC = [], PCA.PCAA = [], PCA.PCAD = "__STRING__";
if (SWT) PCA.PCAD = SPT + "$" + SCT + "," + SAT + "#" + PCA.PCAD;
PCA.PCAD.split("#").forEach(function (VAL1, ID1) {
PCA.PCAP[ID1] = VAL1.split("$")[0], PCA.PCAC[ID1] = [], PCA.PCAA[ID1] = [];
VAL1.split("$")[1].split("|").forEach(function (VAL2, ID2) {
PCA.PCAC[ID1].push((PCA.PCAR = VAL2.split(",")).shift()), PCA.PCAA[ID1][ID2] = PCA.PCAR;
});
});
return this;
};
PCAS.SetP = function (PCA) {
PCA.PCAP.forEach(function (VAL, IDX) {
PCA.PCAT = PCA.PCAV = VAL;
if (PCA.PCAT === SPT) PCA.PCAV = "";
PCA.SelP.options.add(new Option(PCA.PCAT, PCA.PCAV));
if (PCA.DefP === PCA.PCAV) PCA.SelP[IDX].selected = true
}), PCA.SelC ? PCAS.SetC(PCA) : $(PCA.SelP).trigger('change');
};
PCAS.SetC = function (PCA) {
PCA.SelC.length = 0;
PCA.PCAC[PCA.SelP.selectedIndex].forEach(function (VAL, IDX) {
PCA.PCAT = PCA.PCAV = VAL;
if (PCA.PCAT === SCT) PCA.PCAV = "";
PCA.SelC.options.add(new Option(PCA.PCAT, PCA.PCAV));
if (PCA.DefC === PCA.PCAV) PCA.SelC[IDX].selected = true
}), PCA.SelA ? PCAS.SetA(PCA) : $(PCA.SelC).trigger('change');
};
PCAS.SetA = function (PCA) {
PCA.SelA.length = 0;
PCA.PCAA[PCA.SelP.selectedIndex][PCA.SelC.selectedIndex].forEach(function (VAL, IDX) {
PCA.PCAT = PCA.PCAV = VAL;
if (PCA.PCAT === SAT) PCA.PCAV = "";
PCA.SelA.options.add(new Option(PCA.PCAT, PCA.PCAV));
if (PCA.DefA === PCA.PCAV) PCA.SelA[IDX].selected = true
}), $(PCA.SelA).trigger('change')
};
EOL
);
// 写入区域文件
if (file_put_contents($scriptFile, $scriptContent) && file_put_contents($jsonFile, $jsonContent)) {
echo 'success';
} else {
echo 'error';

File diff suppressed because one or more lines are too long

View File

@ -54,6 +54,7 @@ PCAS.init = function (PCA) {
});
return this;
};
PCAS.SetP = function (PCA) {
PCA.PCAP.forEach(function (VAL, IDX) {
PCA.PCAT = PCA.PCAV = VAL;
@ -62,6 +63,7 @@ PCAS.SetP = function (PCA) {
if (PCA.DefP === PCA.PCAV) PCA.SelP[IDX].selected = true
}), PCA.SelC ? PCAS.SetC(PCA) : $(PCA.SelP).trigger('change');
};
PCAS.SetC = function (PCA) {
PCA.SelC.length = 0;
PCA.PCAC[PCA.SelP.selectedIndex].forEach(function (VAL, IDX) {
@ -71,6 +73,7 @@ PCAS.SetC = function (PCA) {
if (PCA.DefC === PCA.PCAV) PCA.SelC[IDX].selected = true
}), PCA.SelA ? PCAS.SetA(PCA) : $(PCA.SelC).trigger('change');
};
PCAS.SetA = function (PCA) {
PCA.SelA.length = 0;
PCA.PCAA[PCA.SelP.selectedIndex][PCA.SelC.selectedIndex].forEach(function (VAL, IDX) {