Commit e89debdc by 汪睦雄

最新版20200330

parent 1bde0ac8
<?php
/**
* User: littlebearwmx
* Date: 2020/03/07
*/
namespace app\admin\controller;
use app\admin\controller\AuthBase;
use think\Exception;
use app\common\model\Live as LiveModel;
use app\common\utils\WXSendMessage;
class Live extends AuthBase
{
public function _initialize()
{
parent::_initialize();
}
//活动列表
public function index()
{
$lives = WXSendMessage::get_live_rooms(0, 100, true);
if ($lives) {
$res = "刷新直播间列表成功,请在小程序上面查看!";
}else{
$res = "刷新失败!";
}
$this->assign('res', $res);
return view();
}
}
\ No newline at end of file
......@@ -8,6 +8,7 @@ use app\common\utils\WXSendMessage;
use think\Db;
use think\Exception;
use think\Loader;
use app\common\model\UserAddress as UserAddressModel;
Loader::import('wxpay.Api');
......@@ -57,7 +58,13 @@ class Order extends AuthBase
$condition['title'] = ['like', '%' . input('get.title') . '%'];
}
//根据筛选条件查询
$order_list = $this->order_model->hasWhere('userinfo',['phone'=>['like','%'.input('phone').'%']])->where($condition)->order('created_at desc')->paginate(10, false, ['query' => $_GET])->each(function ($item) {
$hasWhere = "1=1";
if (input('phone')) {
// $hasWhere = ['phone'=>['like','%'.input('phone').'%']];
$condition['extras'] = ['like', '%' . input('phone') . '%'];
// echo json_encode( $condition ); exit;
}
$order_list = $this->order_model->hasWhere('userinfo', $hasWhere)->where($condition)->order('created_at desc')->paginate(10, false, ['query' => $_GET])->each(function ($item) {
$project = \app\common\model\Project::withTrashed()->find($item['pid']);
$item['project_poster'] = $project['poster'];
$item['project_title'] = $project['title'];
......@@ -95,12 +102,17 @@ class Order extends AuthBase
$condition['mr_user_orders.created_at'] = ['<', $end_time . ' 00:00:00'];
}
}
$order_list = $this->order_model->hasWhere('userinfo',['phone'=>['like','%'.input('phone').'%']])->where($condition)->order('created_at desc')->select();
$hasWhere = "1=1";
if (input('phone')) {
// $hasWhere = ['phone'=>['like','%'.input('phone').'%']];
$condition['extras'] = ['like', '%' . input('phone') . '%'];
}
$order_list = $this->order_model->hasWhere('userinfo', $hasWhere)->where($condition)->order('created_at desc')->select();
//导出用户信息、活动信息、订单信息,如:姓名、手机号、活动名称、价格、家庭组数、大人数量、孩子数量、孩子年龄、备注等
//导出到excel之前数据处理
$mulit_arr = [];
$mulit_arr['data'] = [];
$cont = [['订单标题', '订单号', '订单来源', '用户名', '电话', '微信号', '地址', 'vip购买信息', '活动名称', '详情', '订单总价', '下单时间', '订单状态']];
$cont = [['订单标题', '订单号', '订单来源', '用户名', '电话', '微信号', '地址', 'vip购买信息', '活动名称', '详情', '收货地址', '收货姓名', '收货手机', '收货地址', '订单总价', '下单时间', '订单状态']];
foreach ($order_list as $vo) {
$arr = [];
$arr[] = $vo['title'];
......@@ -120,10 +132,25 @@ class Order extends AuthBase
$name = json_encode($vo->extras['nickname']);
$name = preg_replace("/\\\u[ed][0-9a-f]{3}\\\u[ed][0-9a-f]{3}/", "*", $name);//替换成*
$name = json_decode($name);
$arr[] = "姓名:{$name},价格:{$vo->extras['price']},数量:{$vo->extras['sign_limits']},地址:{$vo->extras['address']},描述:{$vo->extras['remark']}";
if (isset($vo->extras['address_id'])) {
$arr[] = "姓名:{$name},价格:{$vo->extras['price']},数量:{$vo->extras['sign_limits']}";
$arr[] = "{$name} {$vo->extras['phone']} {$vo->extras['address']}";
$arr[] = "{$name}";
$arr[] = "{$vo->extras['phone']}";
$arr[] = "{$vo->extras['address']}";
}else{
$arr[] = "姓名:{$name},价格:{$vo->extras['price']},数量:{$vo->extras['sign_limits']},描述:{$vo->extras['remark']}";
$arr[] = "{$name} {$vo->extras['phone']} {$vo->extras['address']}";
$arr[] = "{$name}";
$arr[] = "{$vo->extras['phone']}";
$arr[] = "{$vo->extras['address']}";
}
}else{
//会员卡
$arr[] = "价格:{$vo->extras['price']},时长:{$vo->extras['year']},备注:{$vo->extras['remark']}";
$arr[] = '';
}
$arr[] = $vo['total_fee'];
$arr[] = $vo['created_at'];
......@@ -413,6 +440,36 @@ class Order extends AuthBase
}
}
// 添加订单备注
public function adminRemark()
{
$id = input('post.id');
$remark = input('post.remark');
$order = \app\common\model\Order::get($id);
if (!$order) {
return json(['code'=>1, 'msg'=>'订单不存在']);
}
$order->admin_remark = $remark;
if ($order->save()) {
// 发送订阅消息
$user = $order->userInfo;
$result = WXSendMessage::sendSubscribeMessage([
'touser' => $user->openid,
'template_id' => 'eLqDrPK40GaxRn6PDu-eruGQTleEQYbAAnQHNZ2NC7E',
'page' => 'pages/me/order/index?status=2',
'data' => [
'thing1' => '订单备注通知',
'thing3' => $remark
]
]);
return json(['code'=>0, 'msg'=>'修改成功', 'data'=>$result]);
} else {
return json(['code'=>1, 'msg'=>'添加失败']);
}
}
}
......
......@@ -576,34 +576,19 @@ class Project extends AuthBase
$project->allowField('id', 'sort')->update(input('post.'));
halt($project->getLastSql());
}
//商家保存
public function save()
{
$level_1 = RegionModel::where('level', 1)->select();
$level_1 = collection($level_1)->visible(['id', 'title']);
if (input('id')) {
$info = ProjectModel::get(input('id'));
$info['tags_arr'] = explode('|', trim($info->getData('tags'), '|'));
$this->assign('info', $info);
//地域选择
$level_1_arr = $level_1;
$level_2_arr = RegionModel::where('level', 2)->where('pid',$info['level_1'])->select();
$level_3_arr = RegionModel::where('level', 3)->where('pid',$info['level_2'])->select();
$this->assign(compact('level_1_arr','level_2_arr','level_3_arr'));
}
//分类
$catalogs = Catalogs::all();
//城市
$city = Citys::all();
//标签
$tags = Tags::all();
if (request()->isPost()) {
$isUpdate = input('id') ? true : false;
$model = new ProjectModel();
$data = input('post.');
// if (strlen($data['description']) > 40000) {
// $this->error('操作失败:详细介绍内容太长');
// }
if (input('post.type') == 1) {
unset($data['kf_qrcode']);
} else {
......@@ -619,7 +604,66 @@ class Project extends AuthBase
$this->error('操作失败');
}
}
return $this->fetch('', compact('catalogs', 'city', 'tags','level_1'));
// GET页面
$level_1 = RegionModel::where('level', 1)->select();
$level_1 = collection($level_1)->visible(['id', 'title']);
if (input('id')) {
$info = ProjectModel::get(input('id'));
$info['tags_arr'] = explode('|', trim($info->getData('tags'), '|'));
// echo $info['description']; exit;
// echo substr($info['description'], 0, 77000); exit;
// $info['description'] = substr($info['description'], 0, 78000);
$this->assign('info', $info);
//地域选择
$level_1_arr = $level_1;
$level_2_arr = RegionModel::where('level', 2)->where('pid',$info['level_1'])->select();
$level_3_arr = RegionModel::where('level', 3)->where('pid',$info['level_2'])->select();
$this->assign(compact('level_1_arr','level_2_arr','level_3_arr'));
}
//分类
$catalogs = Catalogs::all();
//城市
// $city = Citys::all();
//标签
$tags = Tags::all();
return $this->fetch('', compact('catalogs', 'tags', 'level_1'));
}
public function ajax_level($pid){
// GET页面
$level_1 = RegionModel::where('level', 1)->select();
$level_1 = collection($level_1)->visible(['id', 'title']);
$info = ProjectModel::get($pid);
//地域选择
$level_1_arr = $level_1;
$level_2_arr = RegionModel::where('level', 2)->where('pid', $info['level_1'])->select();
$level_3_arr = RegionModel::where('level', 3)->where('pid', $info['level_2'])->select();
$data = ['level_1_arr'=>$level_1_arr, 'level_2_arr'=>$level_2_arr, 'level_3_arr'=>$level_3_arr,];
echo json_encode(['code'=>0, 'msg'=>'succeed', 'data'=>$data]);
}
//商家保存
public function save1()
{
// GET页面
$info = ProjectModel::get(input('id'));
// echo $info['description']; exit;
// echo "<hr/>";
// echo strlen($info['description']);
// echo "<hr/>";
// echo substr($info['description'], 0, 177000); exit;
$info['description'] = substr($info['description'], 0, 77000);
$this->assign('info', $info);
return $this->fetch('');
}
//上传图片
......@@ -653,6 +697,14 @@ class Project extends AuthBase
return $this->fetch();
}
//修改排序
public function sortPage()
{
$info = ProjectModel::get(input('id'));
$this->assign('info', $info);
return $this->fetch();
}
//修改价格
public function priceSave()
{
......@@ -666,5 +718,17 @@ class Project extends AuthBase
}
}
//修改排序
public function sortSave()
{
if (request()->isPost()) {
$res = ProjectModel::update(input('post.'));
if ($res) {
return json(['code' => 0, 'msg' => '修改成功', 'data'=>$res]);
} else {
return json(['code' => 1, 'msg' => '修改失败']);
}
}
}
}
......@@ -21,7 +21,9 @@ class VipRelation extends AuthBase
$query->where('mobile',input('mobile'));
}
})->order('id', 'desc')
->paginate();
->paginate(15, false, [
'query' => request()->get()
]);
return $this->fetch('', compact('list'));
}
......@@ -40,13 +42,15 @@ class VipRelation extends AuthBase
//获取导入的数据
$data = Excel::excelFileToArray($file['tmp_name'], pathinfo($file['name'], PATHINFO_EXTENSION));
unset($data[0]);
// echo json_encode($data); exit;
$params = [];
foreach ($data as $k => $v) {
if(in_array(null,$v)){
if( count($v) < 5 || !$v[0]){
continue;
}
if(!strtotime($v[3])){
throw new Exception('会员到期格式不正确');
return json(['code' => 1, 'msg' => '会员到期格式不正确']);
// throw new Exception('会员到期格式不正确');
}
$arr = [
'nickname' => $v[0],
......
{layout name="public/layout_main"}
<style type="text/css">
.whitelink{
color: white;
text-decoration: none;
}
.whitelink:hover{
color: #ddd;
}
.nav-tabs{
margin-bottom: 15px;
}
</style>
<section class="wrapper">
<h3><i class="fa fa-angle-right"></i> 直播间刷新</h3>
<hr>
<div>
<?=$res ?>
</div>
</section>
\ No newline at end of file
......@@ -55,7 +55,7 @@
<tr>
<th>ID</th>
<th>订单标题</th>
<th>订单号</th>
<th>订单号/备注</th>
<th>订单来源</th>
<th>项目信息</th>
<th>用户信息</th>
......@@ -73,7 +73,11 @@
<tr>
<td>{$vo.id}</td>
<td>{$vo.title}</td>
<td>{$vo.out_trade_no}</td>
<td>
{$vo.out_trade_no}
<br/><br/>
备注:<span style="color:#2d8cf0"> {$vo.admin_remark} </span>
</td>
<td>
{if condition="$vo.type == 1"}
活动报名
......@@ -88,13 +92,46 @@
</a>
<p style="padding:0;margin:0;">{$vo.project_title}</p>
<p style="padding:0;margin:0;">姓名:{$vo.extras['nickname']}</p>
<p style="padding:0;margin:0;">价格:{$vo.extras['price']}</p>
<p style="padding:0;margin:0;">价格:<?php
if (isset($vo['extras']['vip_total_price'])) {
echo "<br/>";
echo "* 此前已购数量:".$vo['extras']['buyed_num']."<br/>";
echo "* VIP价格:".$vo['extras']['vip_total_price']."<br/>";
echo "* 非VIP价格:".$vo['extras']['novip_total_price']."<br/>";
echo "* 总价格:".$vo['extras']['total_price']."<br/>";
}else{
echo $vo['extras']['price'];
}
?></p>
<p style="padding:0;margin:0;">数量:{$vo.extras['sign_limits']}</p>
<p style="padding:0;margin:0;">地址:{$vo.extras['address']}</p>
<p style="padding:0;margin:0;">备注:{$vo.extras['remark']}</p>
<p style="padding:0;margin:0;">地址:
<?php
if(isset($vo['extras']['address_id'])){
echo $vo['extras']['nickname']." ".$vo['extras']['phone']." ".$vo['extras']['address'];
}else{
// 新版地址
echo $vo['extras']['address'];
}
?>
</p>
<p style="padding:0;margin:0;">备注:<?php
if(isset($vo['extras']['remark'])){
echo $vo['extras']['remark'];
}else{
echo "无";
}
?>
</p>
{else /}
<p style="padding:0;margin:0;">价格:{$vo.extras['price']}</p>
<p style="padding:0;margin:0;">时长(单位/年):{$vo.extras['year']}</p>
<p style="padding:0;margin:0;">是否老会员续费:<?php
if(isset($vo['extras']['is_vip_renew'])){
echo $vo['extras']['is_vip_renew'] ? '是' : '否';
}else{
echo '未知';
}
?></p>
<p style="padding:0;margin:0;">备注:{$vo.extras['remark']}</p>
{/if}
</td>
......@@ -147,6 +184,8 @@
{else /}
<button class="btn btn-primary" disabled="disabled">待评价</button>
{/if}
<button class="btn btn-default aremark" style="margin-top:5px;" data-id="{$vo.id}">加备注</button>
{else /}
/
{/if}
......@@ -163,10 +202,29 @@
{$order_list->render()}
</div>
</div>
</section>
<div class="modal fade" id="createRemarkModal" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-body">
<form>
<div class="form-group">
<label for="fileName" class="col-form-label">备注内容</label>
<input type="text" autofocus class="form-control" id="admin_remark">
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" id="createRemarkSureBut">确定</button>
</div>
</div>
</div>
</div>
<script type="text/javascript">
var prjid = 0;
// 文档加载完毕之后,会进入该方法
$(function () {
// $(".btn-delete").click(function(){
......@@ -213,5 +271,24 @@
}
});
});
$('.aremark').click(function () {
prjid = $(this).attr('data-id');
$("#createRemarkModal").modal();
});
$('#createRemarkSureBut').click(function () {
$("#createRemarkModal").modal('hide');
let aremark = $("#admin_remark").val();
if (aremark!=null && aremark!='') {
$.post('adminRemark', {id:prjid, remark:aremark}, function (res) {
$("#admin_remark").val('');
var res = JSON.parse(res);
if (res.error == 1) {
alert(res.msg);
}
});
}
});
});
</script>
......@@ -96,8 +96,8 @@
<th>活动/商家信息</th>
<th>状态</th>
<th>推荐置顶</th>
<th>转让专区</th>
<th>排序</th>
<th>房券专区</th>
<th style="min-width:100px;">排序</th>
<th>操作</th>
</tr>
</thead>
......@@ -165,8 +165,12 @@
</div>
</td>
<td>
<input type="number" size="4" style="width:50px" onchange="setSort(this.value,{$vo.id})"
value="{$vo.sort}">
<br/><br/>
<span>通用:<span id="sort_{$vo.id}">{$vo.sort}</span> </span><br/>
<span>活动:<span id="sort_news_{$vo.id}">{$vo.sort_news}</span> </span><br/>
<span>水果:<span id="sort_catalog7_{$vo.id}">{$vo.sort_catalog7}</span></span>
<br/><br/>
<button onclick="changeSort({$vo.id})" class="btn btn-xs btn-primary">修改排序</button>
</td>
<td>
<button onclick="changePrice({$vo.id})" href="" class="btn btn-xs btn-primary">修改价格</button>
......@@ -206,7 +210,7 @@
});
});
//设置排序
// 设置排序
function setSort(sort, id) {
$.post("{:url('setSort')}", {id: id, sort: sort}, function () {
location.reload();
......@@ -252,4 +256,20 @@
});
}
function changeSort(id) {
layui.use(['layer', 'jquery'], function () {
var layer = layui.layer
, $ = layui.jquery;
$.post("{:url('sortPage')}",{id:id},function(html){
layer.open({
type:1,
title:'修改排序',
area:['500px','350px'],
content:html,
});
});
});
}
</script>
......@@ -139,16 +139,7 @@
</div>
</div>
<!--<div class="form-group">-->
<!--<label class="col-sm-2 control-label text-right">城市</label>-->
<!--<div class="col-sm-10 col-md-8 col-lg-6">-->
<!--<select class="form-control selectpicker" name='city' data-live-search="true">-->
<!--{foreach city as $v}-->
<!--<option value="{$v.id}" {if !empty($info['city'])} {if $v['id']==$info['city']}selected{/if} {/if}>{$v['name']}</option>-->
<!--{/foreach}-->
<!--</select>-->
<!--</div>-->
<!--</div>-->
<div class="form-group">
<label class="col-sm-2 control-label text-right">标签</label>
......@@ -479,6 +470,14 @@
this.$data.level_1_select = {$info['level_1']?:0;};
this.$data.level_2_select = {$info['level_2']?:0;};
this.$data.level_3_select = {$info['level_3']?:0;};
// $.get("{:url('Project/ajax_level')}", {pid: "<?=$info['id']?>"}, function (data) {
// data = JSON.parse(data)
// this.$data.level_1 = data.data.level_1_arr;
// this.$data.level_2 = data.data.level_2_arr;
// this.$data.level_3 = data.data.level_3_arr;
// });
this.$data.level_1 = JSON.parse('{:json_encode($level_1_arr)}');
this.$data.level_2 = JSON.parse('{:json_encode($level_2_arr)}');
this.$data.level_3 = JSON.parse('{:json_encode($level_3_arr)}');
......
{layout name="public/fullscreen"}
<link rel="stylesheet" href="/static/validation/css/validationEngine.jquery.css">
<link rel="stylesheet" href="/static/fileinput/css/fileinput.css">
<link rel="stylesheet" href="/static/bootstrap-select/css/bootstrap-select.min.css">
<link rel="stylesheet" href="/static/datetimepicker/css/bootstrap-datetimepicker.min.css">
<link rel="stylesheet" href="/static/layui/css/layui.css">
<script src="/static/layui/layui.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.min.js"></script>
<style type="text/css">
.progress-bar {
text-align: center;
}
.dropdown-menu {
z-index: 100000;
}
.layui-upload-img {
width: 92px;
height: 92px;
margin: 0 10px 10px 0;
}
.click-a {
color: #428bca;
}
.click-a:hover {
color: #777;
}
[v-cloak] {
display: none;
}
</style>
<section class="wrapper" style="padding-top: 20px;">
<div class="form-group" id="content">
<label for="content" class="col-sm-2 control-label text-right">详细介绍</label>
<div class="col-sm-10 col-md-8 col-lg-6">
<!-- 加载编辑器的容器 -->
<script id="post_container" name="description" style="width: 100%" type="text/plain"><?php if(isset($info)){echo $info->description;} ?></script>
</div>
</div>
</form>
<!-- 文件上传和select插件 -->
<script type="text/javascript" src="/static/fileinput/js/fileinput.js"></script>
<script type="text/javascript" src="/static/fileinput/js/locales/zh.js"></script>
<script type="text/javascript" src="/static/bootstrap-select/js/bootstrap-select.min.js"></script>
<script type="text/javascript" src="/static/bootstrap-select/js/i18n/defaults-zh_CN.js"></script>
<script type="text/javascript" src="/static/validation/js/jquery.validationEngine-zh_CN.js"></script>
<script type="text/javascript" src="/static/validation/js/jquery.validationEngine.js"></script>
<script type="text/javascript" src="/static/datetimepicker/js/bootstrap-datetimepicker.min.js"></script>
<script type="text/javascript" src="/static/datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js"></script
<!-- 编辑器配置文件 -->
<script src="/static/qiniu_ueditor143/ueditor.config.js"></script>
<script src="/static/qiniu_ueditor143/ueditor.all.min.js"></script>
<script src="/static/qiniu_ueditor143/lang/zh-cn/zh-cn.js"></script>
<script>
//表单验证
$("#myFrom").validationEngine();
// 初始化时间选择器
$("#end").datetimepicker({
language: 'zh-CN',
autoclose: true,
format: 'yyyy-mm-dd hh:ii:00'
});
//初始化商家的数据
changeType({$info['type'] ?? 1}, true);
//更换活动/商家
function changeType(type, init) {
//设置默认值
init = arguments[1] ? arguments[1] : false;
if (init) {
$('.type-activity').hide();
$('.type-business').hide();
}
//隐藏或者显示活动商家
if (type == 1) {
$('.type-activity').fadeIn();
$('.type-business').fadeOut();
} else if (type == 2) {
$('.type-activity').fadeOut();
$('.type-business').fadeIn();
}
}
layui.use(['jquery', 'upload', 'form', 'layer'], function () {
var $ = layui.jquery
, upload = layui.upload
, form = layui.form
, layer = layui.layer;
//多图片上传
upload.render({
elem: '#banners'
, url: "{:url('uploadImg')}"
, multiple: true
, before: function () {
layer.load(1);
}
, done: function (res) {
layer.closeAll();
//上传完毕
if (res.code == 0) {
$('#banners-list').append('<div class="image-box" style="display: inline-block"><div style="display:flex;flex-direction: column"><img src="' + res.url + '" class="layui-upload-img"><input type="hidden" name="banners[]" value="' + res.url + '"><i class="icon-del layui-icon" style="text-align: center">&#xe640;</i></div></div>')
} else {
layer.msg(res.msg);
}
}
, error: function () {
layer.closeAll();
}
});
//多图上传删除
$('form').on('click', '.icon-del', function () {
$(this).closest('.image-box').remove();
});
//普通图片上传
var uploadInst = upload.render({
elem: '#test1'
, url: "{:url('uploadImg')}"
, before: function () {
layer.load(1);
}
, done: function (res) {
layer.closeAll();
if (res.code == 0) {
$('#demo1').attr('src', res.url);
$('#poster-input').val(res.url);
} else {
layer.msg(res.msg)
}
}
, error: function () {
layer.closeAll();
}
});
//客服二维码普通图片上传
var uploadInst2 = upload.render({
elem: '#test2'
, url: "{:url('uploadLocalImg')}"
, before: function () {
layer.load(1);
}
, done: function (res) {
layer.closeAll();
if (res.code == 0) {
$('#dome2').attr('src', res.url);
$('#qrcode-input').val(res.url);
} else {
layer.msg(res.msg)
}
}
, error: function () {
layer.closeAll();
}
});
});
var ueditor = UE.getEditor('post_container', {
//编辑区域大小
'initialFrameHeight': '350',
'elementPathEnabled': false,
'autoHeight': false,
'autoHeightEnabled': false,
'autoFloatEnabled': false,
'iframeCssUrl': '/static/qiniu_ueditor143/themes/iframe.css',// 引入css
//定制菜单
'toolbars': [
[
'fullscreen', 'source', 'undo', 'redo', '|',
'fontsize',
'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'removeformat',
'formatmatch', 'blockquote', 'pasteplain', '|',
'forecolor', 'backcolor', '|',
'lineheight', '|',
'indent', '|', 'insertimage', '|',
'justifyleft', //居左对齐
'justifyright', //居右对齐
'justifycenter', //居中对齐
'justifyjustify', //两端对齐
],
]
});
</script>
</section>
<form action="" class="layui-form" style="padding: 10px;">
<div class="form-group">
<label class="layui-form-label">通用</label>
<div class="layui-input-block">
<input type="number" class="layui-input" name="sort" value="{$info['sort']}">
</div>
</div>
<div class="form-group">
<label class="layui-form-label">活动</label>
<div class="layui-input-block">
<input type="number" class="layui-input" name="sort_news" value="{$info['sort_news']}">
</div>
</div>
<div class="form-group">
<label class="layui-form-label">水果</label>
<div class="layui-input-block">
<input type="number" class="layui-input" name="sort_catalog7" value="{$info['sort_catalog7']}">
</div>
</div>
<div class="form-group">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="*">修改</button>
</div>
</div>
<div>
<input type="hidden" name="id" value="{$info['id']}">
</div>
</form>
<script>
layui.use(['jquery', 'form', 'layer'], function () {
var form = layui.form
, $ = layui.jquery
, layer = layui.layer;
form.on('submit(*)', function (data) {
//提交
$.post("{:url('sortSave')}",data.field,function(res){
layer.msg(res.msg);
setTimeout(function(){
$('#sort_'+res.data.id).html(res.data.sort);
$('#sort_news_'+res.data.id).html(res.data.sort_news);
$('#sort_catalog7_'+res.data.id).html(res.data.sort_catalog7);
layer.closeAll();
},1500);
});
return false;
});
});
</script>
\ No newline at end of file
......@@ -90,7 +90,7 @@
</li>
<li class="sub-menu">
<a <?php if(in_array(CONTROLLER_NAME, array('Log','Post'))){echo 'class="active"';}?> href="javascript:void(0);" >
<a <?php if(in_array(CONTROLLER_NAME, array('Log','Post', 'Live'))){echo 'class="active"';}?> href="javascript:void(0);" >
<i class="fa fa-cog"></i>
<span>其他管理</span>
</a>
......@@ -98,6 +98,9 @@
<li <?php if(CONTROLLER_NAME == 'Log'&&ACTION_NAME=='index'){echo 'class="active"';}?>>
<a href="<?php echo url("@admin/Log/index", ['level'=>'info'])?>">日志信息</a>
</li>
<li <?php if(CONTROLLER_NAME == 'Live'&&ACTION_NAME=='index'){echo 'class="active"';}?>>
<a href="<?php echo url("@admin/Live/index")?>">刷新直播间</a>
</li>
</ul>
</li>
......
<?php
namespace app\api\controller;
use app\api\model\UserAddress;
use app\common\model\User as UserModel;
/**
* 收货地址管理
* Class Address
* @package app\api\controller
*/
class Address extends Base
{
/**
* 收货地址列表
* @return array
* @throws \app\common\exception\BaseException
* @throws \think\exception\DbException
*/
public function lists()
{
$user = UserModel::get($this->userinfo[0]);
$model = new UserAddress;
$list = $model->getList($user['id']);
return $this->renderSuccess([
'list' => $list,
'default_id' => $user['address_id'],
]);
}
/**
* 收货地址列表
* @return array
* @throws \app\common\exception\BaseException
* @throws \think\exception\DbException
*/
public function userdf()
{
$user = UserModel::get($this->userinfo[0]);
$model = new UserAddress;
if ($user['address_id']) {
// 默认地址
$user['address'] = $model->get($user['address_id']);
$user['exist_address'] = true;
}else{
$user['address'] = null;
$user['exist_address'] = false;
}
return $this->renderSuccess($user);
}
/**
* 添加收货地址
* @return array
* @throws \app\common\exception\BaseException
* @throws \think\exception\DbException
*/
public function add()
{
$model = new UserAddress;
$user = UserModel::get($this->userinfo[0]);
if ($model->add($user, $this->request->post())) {
return $this->renderSuccess([], '添加成功');
}
return $this->renderError($model->getError() ?: '添加失败');
}
/**
* 收货地址详情
* @param $address_id
* @return array
* @throws \app\common\exception\BaseException
* @throws \think\exception\DbException
*/
public function detail($address_id)
{
$user = UserModel::get($this->userinfo[0]);
$detail = UserAddress::detail($user['user_id'], $address_id);
$region = array_values($detail['region']);
return $this->renderSuccess(compact('detail', 'region'));
}
/**
* 编辑收货地址
* @param $address_id
* @return array
* @throws \app\common\exception\BaseException
* @throws \think\exception\DbException
*/
public function edit($address_id)
{
$user = UserModel::get($this->userinfo[0]);
$model = UserAddress::detail($user['user_id'], $address_id);
if ($model->edit($this->request->post())) {
return $this->renderSuccess([], '更新成功');
}
return $this->renderError($model->getError() ?: '更新失败');
}
/**
* 设为默认地址
* @param $address_id
* @return array
* @throws \app\common\exception\BaseException
* @throws \think\exception\DbException
*/
public function setDefault($address_id)
{
$user = UserModel::get($this->userinfo[0]);
$model = UserAddress::detail($user['id'], $address_id);
if ($model->setDefault($user)) {
return $this->renderSuccess([], '设置成功');
}
return $this->renderError($model->getError() ?: '设置失败');
}
/**
* 删除收货地址
* @param $address_id
* @return array
* @throws \app\common\exception\BaseException
* @throws \think\exception\DbException
*/
public function delete($address_id)
{
$user = UserModel::get($this->userinfo[0]);
$model = UserAddress::detail($user['id'], $address_id);
if ($model->remove($user)) {
return $this->renderSuccess([], '删除成功');
}
return $this->renderError($model->getError() ?: '删除失败');
}
/**
* 返回封装后的 API 数据到客户端
* @param int $code
* @param string $msg
* @param array $data
* @return array
*/
private function renderJson($code = 0, $msg = '', $data = [])
{
return compact('code', 'msg', 'data');
}
/**
* 返回操作成功json
* @param array $data
* @param string|array $msg
* @return array
*/
private function renderSuccess($data = [], $msg = 'success')
{
return $this->renderJson(0, $msg, $data);
}
/**
* 返回操作失败json
* @param string $msg
* @param array $data
* @return array
*/
private function renderError($msg = 'error', $data = [])
{
return $this->renderJson(1, $msg, $data);
}
}
<?php
/**
* User: littlebearwmx
* Date: 2020/03/07
*/
namespace app\api\controller;
use think\Exception;
use app\common\model\Live as LiveModel;
use app\common\utils\WXSendMessage;
class Live extends Base
{
public function _initialize()
{
parent::_initialize();
}
// 获取直播列表
public function rooms()
{
$lives = WXSendMessage::get_live_rooms(0, 100);
if (count($lives) > 0) {
return ['code' => 0, 'msg' => 'success', 'data' => $lives];
}else{
return ['code' => 1, 'msg' => '没有更多了'];
}
}
}
\ No newline at end of file
......@@ -47,7 +47,8 @@ class Project extends Base
//根据项目
if (input('?post.type')) $map['type'] = input('post.type/d');
//根据分类
if (input('?post.catalog_id')) $map['catalog_id'] = input('post.catalog_id');
$post_catalog_id = input('post.catalog_id/d', 0);
if ($post_catalog_id) $map['catalog_id'] = $post_catalog_id;
//根据标签划分
if (input('?post.tags')) {
$tags = [];
......@@ -63,8 +64,6 @@ class Project extends Base
}
$map['tags'] = $tags;
}
// halt($map);
}
}
$project = ProjectModel::all(function ($query) use ($map, $p, $page) {
......@@ -88,7 +87,12 @@ class Project extends Base
// }
//排序
if (input('order', 'default') === 'default') {
$query->order('sort', 'desc');
if(input('post.catalog_id/d', 0) == 7){
// 超值团购-单独排序
$query->order('sort_catalog7 desc,id desc');
}else{
$query->order('sort', 'desc');
}
} elseif (input('order', 'default') === 'new') {
$query->order('id', 'desc');
} elseif (input('order', 'default') === 'price') {
......@@ -125,17 +129,17 @@ class Project extends Base
$query->where('level_3', input('level_3'));
}
})
// ->order('sort', 'desc')
->order('sort_news', 'desc')
->order('id', 'desc')
->limit(6);
});
$newProjects = $newProjects ? collection($newProjects)->visible(['id', 'title', 'poster', 'night_num', 'price', 'vip_price'])->toArray() : [];
// 爆款专区-只显示3个
// 2019-04-15 littlebear:爆款专区 --> 更改为显示“推荐置顶”的活动
$heatProjects = ProjectModel::all(function ($query) {
// 超值团购(分类:水果零食)
$tuans = ProjectModel::all(function ($query) {
$query->where('type', 1)
->where('is_transfer', 0)
->where('catalog_id', 7)
->where(function ($query) {
//地域
if (input('level_1')) {
......@@ -148,14 +152,36 @@ class Project extends Base
$query->where('level_3', input('level_3'));
}
})
->where('heat', 'neq', 0)
->order('sort_catalog7', 'desc')
->order('id', 'desc')
->limit(6);
});
$tuans = $tuans ? collection($tuans)->visible(['id', 'title', 'poster', 'night_num', 'price', 'vip_price'])->toArray() : [];
// 房券专区
$heatProjects = ProjectModel::all(function ($query) {
$query->where('type', 2)
->where('is_transfer', 1)
->where(function ($query) {
//地域
if (input('level_1')) {
$query->where('level_1', input('level_1'));
}
if (input('level_2')) {
$query->where('level_2', input('level_2'));
}
if (input('level_3')) {
$query->where('level_3', input('level_3'));
}
})
// ->where('heat', 'neq', 0)
->order('sort', 'desc')
->order('id', 'desc')
->limit(6);
});
$heatProjects = $heatProjects ? collection($heatProjects)->visible(['id', 'title', 'poster', 'night_num', 'price', 'vip_price'])->toArray() : [];
// 酒店预订
// 美行推荐
$businessProjects = ProjectModel::all(function ($query) {
$query->where('type', 2) // ->where('catalog_id', 5)
->where(function ($query) {
......@@ -173,7 +199,7 @@ class Project extends Base
->where('is_transfer', 0)
->order('sort', 'desc')
->order('id', 'desc')
->limit(8);
->limit(9);
});
$businessProjects = $businessProjects ? collection($businessProjects)->visible(['id', 'title', 'poster', 'night_num', 'price', 'vip_price'])->toArray() : [];
......@@ -185,7 +211,7 @@ class Project extends Base
});
$guides = $guides ? collection($guides)->toArray() : [];
$data = compact('newProjects', 'heatProjects', 'businessProjects', 'guides');
$data = compact('newProjects', 'tuans', 'heatProjects', 'businessProjects', 'guides');
if (!$data) return ['code' => 1, 'msg' => '没有更多'];
return ['code' => 0, 'msg' => 'success', 'data' => $data];
}
......@@ -217,7 +243,7 @@ class Project extends Base
$query->where('level_3', input('level_3'));
}
})
// ->order('sort', 'desc')
->order('sort_news', 'desc')
->order('id', 'desc')
->page($p, $page);
});
......
......@@ -369,6 +369,10 @@ class User extends Base
return ['code' => 1, 'msg' => '用户不存在'];
}
//过期时间
if ($this->userinfo[0] == 4) {
// 汪小熊调试-4
// echo strtotime('2020-03-10'); exit;
}
if ($user['is_vip']) {
if (strtotime($user['vip_endtime']) > time()) {
$user['vip_endtime_str'] = '剩余' . ceil((strtotime($user['vip_endtime']) - time()) / 86400) . '天';
......
<?php
namespace app\api\model;
use app\common\model\AddressRegion;
use app\common\model\UserAddress as UserAddressModel;
/**
* 用户收货地址模型
* Class UserAddress
* @package app\common\model
*/
class UserAddress extends UserAddressModel
{
/**
* 隐藏字段
* @var array
*/
protected $hidden = [
];
/**
* @param $user_id
* @return false|static[]
* @throws \think\exception\DbException
*/
public function getList($user_id)
{
return self::all(compact('user_id'));
}
/**
* 新增收货地址
* @param User $user
* @param $data
* @return mixed
*/
public function add($user, $data)
{
return $this->transaction(function () use ($user, $data) {
// 整理地区信息
$region = explode(',', $data['region']);
$provinceId = AddressRegion::getIdByName($region[0], 1);
$cityId = AddressRegion::getIdByName($region[1], 2, $provinceId);
$regionId = AddressRegion::getIdByName($region[2], 3, $cityId);
// 验证城市ID是否合法
if (!$this->checkCityId($cityId)) return false;
// 添加收货地址
$this->allowField(true)->save([
'name' => $data['name'],
'phone' => $data['phone'],
'province_id' => $provinceId,
'city_id' => $cityId,
'region_id' => $regionId,
'detail' => $data['detail'],
'district' => ($regionId === 0 && !empty($region[2])) ? $region[2] : '',
'user_id' => $user['id']
]);
// 设为默认收货地址
!$user['address_id'] && $user->save(['address_id' => $this['address_id']]);
return true;
});
}
/**
* 编辑收货地址
* @param $data
* @return false|int
*/
public function edit($data)
{
// 整理地区信息
$region = explode(',', $data['region']);
$provinceId = AddressRegion::getIdByName($region[0], 1);
$cityId = AddressRegion::getIdByName($region[1], 2, $provinceId);
$regionId = AddressRegion::getIdByName($region[2], 3, $cityId);
// 验证城市ID是否合法
if (!$this->checkCityId($cityId)) return false;
// 更新收货地址
return $this->allowField(true)->save([
'name' => $data['name'],
'phone' => $data['phone'],
'province_id' => $provinceId,
'city_id' => $cityId,
'region_id' => $regionId,
'detail' => $data['detail'],
'district' => ($regionId === 0 && !empty($region[2])) ? $region[2] : '',
]) !== false;
}
/**
* 验证城市ID是否合法
* @param $cityId
* @return bool
*/
private function checkCityId($cityId)
{
if ($cityId <= 0) {
$this->error = '很抱歉,您选择的城市不存在';
return false;
}
return true;
}
/**
* 设为默认收货地址
* @param User $user
* @return int
*/
public function setDefault($user)
{
// 设为默认地址
return $user->save(['address_id' => $this['address_id']]);
}
/**
* 删除收货地址
* @param User $user
* @return int
*/
public function remove($user)
{
// 查询当前是否为默认地址
$user['address_id'] == $this['address_id'] && $user->save(['address_id' => 0]);
return $this->delete();
}
/**
* 收货地址详情
* @param $user_id
* @param $address_id
* @return null|static
* @throws \think\exception\DbException
*/
public static function detail($user_id, $address_id)
{
return self::get(compact('user_id', 'address_id'));
}
}
<?php
namespace app\common\model;
use think\Cache;
use app\common\utils\helper;
/**
* 地区模型
* Class Region
* @package app\common\model
*/
class AddressRegion extends BaseModel
{
protected $name = 'address_region';
protected $createTime = false;
protected $updateTime = false;
/**
* 类型自动转换
* @var array
*/
protected $type = [
'id' => 'integer',
'pid' => 'integer',
'level' => 'integer',
];
// 当前数据版本号
private static $version = '1.2.3';
// 县级市别名 (兼容微信端命名)
private static $county = [
'省直辖县级行政区划',
'自治区直辖县级行政区划',
];
/**
* 根据id获取地区名称
* @param $id
* @return string
*/
public static function getNameById($id)
{
return $id > 0 ? self::getCacheAll()[$id]['name'] : '其他';
}
/**
* 根据名称获取地区id
* @param $name
* @param int $level
* @param int $pid
* @return mixed
*/
public static function getIdByName($name, $level = 0, $pid = 0)
{
// 兼容:微信端"省直辖县级行政区划"
if (in_array($name, static::$county)) {
$name = '直辖县级';
}
$data = self::getCacheAll();
foreach ($data as $item) {
if ($item['name'] == $name && $item['level'] == $level && $item['pid'] == $pid)
return $item['id'];
}
return 0;
}
/**
* 获取所有地区(树状结构)
* @return mixed
*/
public static function getCacheTree()
{
return static::getCacheData('tree');
}
/**
* 获取所有地区列表
* @return mixed
*/
public static function getCacheAll()
{
return static::getCacheData('all');
}
/**
* 获取所有地区的总数
* @return mixed
*/
public static function getCacheCounts()
{
return static::getCacheData('counts');
}
/**
* 获取缓存中的数据(存入静态变量)
* @param null $item
* @return array|mixed
*/
private static function getCacheData($item = null)
{
static $cacheData = [];
if (empty($cacheData)) {
$static = new static;
$cacheData = $static->regionCache();
}
if (is_null($item)) {
return $cacheData;
}
return $cacheData[$item];
}
/**
* 获取地区缓存
* @return array|mixed
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
private function regionCache()
{
// 缓存的数据
$complete = Cache::get('region');
// 如果存在缓存则返回缓存的数据,否则从数据库中查询
// 条件1: 获取缓存数据
// 条件2: 数据版本号要与当前一致
if (
!empty($complete)
&& isset($complete['version'])
&& $complete['version'] == self::$version
) {
return $complete;
}
// 所有地区
$allList = $tempList = $this->getAllList();
// 已完成的数据
$complete = [
'all' => $allList,
'tree' => $this->getTreeList($allList),
'counts' => $this->getCount($allList),
'version' => self::$version,
];
// 写入缓存
Cache::tag('cache')->set('region', $complete);
return $complete;
}
private static function getCount($allList)
{
$counts = [
'total' => count($allList),
'province' => 0,
'city' => 0,
'region' => 0,
];
$level = [1 => 'province', 2 => 'city', 3 => 'region'];
foreach ($allList as $item) {
$counts[$level[$item['level']]]++;
}
return $counts;
}
/**
* 格式化为树状格式
* @param $allList
* @return array
*/
private function getTreeList($allList)
{
$treeList = [];
foreach ($allList as $pKey => $province) {
if ($province['level'] == 1) { // 省份
$treeList[$province['id']] = $province;
unset($allList[$pKey]);
foreach ($allList as $cKey => $city) {
if ($city['level'] == 2 && $city['pid'] == $province['id']) { // 城市
if (is_object($treeList[$province['id']])) {
$treeList[$province['id']] = $treeList[$province['id']]->toArray();
}
$treeList[$province['id']]['city'][$city['id']] = $city;
unset($allList[$cKey]);
foreach ($allList as $rKey => $region) {
if ($region['level'] == 3 && $region['pid'] == $city['id']) { // 地区
if (is_object($treeList[$province['id']]['city'][$city['id']])) {
$treeList[$province['id']]['city'][$city['id']] = $treeList[$province['id']]['city'][$city['id']]->toArray();
}
$treeList[$province['id']]['city'][$city['id']]['region'][$region['id']] = $region;
unset($allList[$rKey]);
}
}
}
}
}
}
return $treeList;
}
/**
* 从数据库中获取所有地区
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
private function getAllList()
{
$list = self::useGlobalScope(false)
->field('id, pid, name, level')
->select();
return helper::arrayColumn2Key($list, 'id');
}
}
<?php
namespace app\common\model;
use think\Model;
use traits\model\SoftDelete;
class Live extends Model
{
use SoftDelete;
// 设置当前模型对应的完整数据表名称
protected $table = 'mr_lives';
// 开启自动写入时间戳字段
protected $autoWriteTimestamp = 'datetime';
// 定义时间戳字段名
protected $createTime = 'created_at';
protected $updateTime = 'updated_at';
protected $deleteTime = 'deleted_time';
public function getStatusTextAttr($value, $data)
{
$arr = [
101 => '直播中',
102 => '未开始',
103 => '已结束',
104 => '禁播',
105 => '暂停中',
106 => '异常',
107 => '已过'
];
return $arr[ $data['live_status'] ];
}
public function getStartTimeAttr($value, $data)
{
return date('Y-m-d H:i', $value);
}
public function getEndtTimeAttr($value, $data)
{
return date('Y-m-d H:i', $value);
}
}
<?php
namespace app\common\model;
/**
* 用户收货地址模型
* Class UserAddress
* @package app\common\model
*/
class UserAddress extends BaseModel
{
protected $name = 'user_address';
/**
* 追加字段
* @var array
*/
protected $append = ['region'];
/**
* 地区名称
* @param $value
* @param $data
* @return array
*/
public function getRegionAttr($value, $data)
{
return [
'province' => AddressRegion::getNameById($data['province_id']),
'city' => AddressRegion::getNameById($data['city_id']),
'region' => $data['region_id'] == 0 ? $data['district']
: AddressRegion::getNameById($data['region_id']),
];
}
}
......@@ -7,6 +7,7 @@ use app\common\model\Keyword as KeywordModel;
use app\common\model\Message as MessageModel;
use app\common\utils\RedisHelper;
use app\common\model\Live as LiveModel;
/**
* 微信公众号发送消息
......@@ -43,6 +44,73 @@ class WXSendMessage
}
/*
* 获取直播间列表
*/
public static function get_live_rooms($start, $limit, $refresh=false)
{
$access_token = WXSendMessage::access_token();
$url = "http://api.weixin.qq.com/wxa/business/getliveinfo?access_token=".$access_token;
$data['start'] = $start;
$data['limit'] = $limit;
// 提交数据是JSON字符串
$data = json_encode($data);
$key = "live_rooms";
if (cache($key) && !$refresh) {
// 获取缓存
}else{
$result = WXSendMessage::https_curl_post($url, $data);
$result = json_decode($result);
// print_r($result); exit;
if ($result->errcode == 0 && $result->errmsg == 'ok' ) {
$romms = $result->room_info;
foreach ($romms as $index => &$room) {
$live = LiveModel::where(['roomid'=>$room->roomid])->find();
if (!$live) {
$live = new LiveModel;
}
$room->goods = json_encode( $room->goods );
$live->save($room);
}
}
// 存入,3600秒过期
cache($key, $key."", 3600);
}
$lives = LiveModel::order('id desc')->select();
foreach ($lives as &$room) {
$room['live_status_text'] = $room->status_text;
}
return $lives;
}
/*
* 获取直播间列表
*/
public static function sendSubscribeMessage($datas)
{
$access_token = WXSendMessage::access_token();
$url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=".$access_token;
$data['touser'] = $datas['touser'];
$data['template_id'] = $datas['template_id'];
$data['page'] = $datas['page'];
$params = $datas['data'];
$i = 1;
foreach ($params as $key => $value) {
$data['data'][$key]['value'] = $value;
$i++;
}
// 提交数据是JSON字符串
$ret = json_encode($data);
$result = WXSendMessage::https_curl_post($url, $ret);
$final = json_decode($result);
return $final;
}
/*
* 发送模版消息
*/
public static function send_template_notice( $to_openid, $template_id, $page, $form_id, $params )
......
<?php
namespace app\common\utils;
/**
* 工具类
* Class helper
* @package app\common\library
*/
class helper
{
/**
* 获取数组中指定的列
* @param $source
* @param $column
* @return array
*/
public static function getArrayColumn($source, $column)
{
$columnArr = [];
foreach ($source as $item) {
$columnArr[] = $item[$column];
}
return $columnArr;
}
/**
* 获取数组中指定的列
* @param $source
* @param $columns
* @return array
*/
public static function getArrayColumns($source, $columns)
{
$columnArr = [];
foreach ($source as $item) {
$temp = [];
foreach ($columns as $index) {
$temp[$index] = $item[$index];
}
$columnArr[] = $temp;
}
return $columnArr;
}
/**
* 把二维数组中某列设置为key返回
* @param $source
* @param $index
* @return array
*/
public static function arrayColumn2Key($source, $index)
{
$data = [];
foreach ($source as $item) {
$data[$item[$index]] = $item;
}
return $data;
}
public static function number2($number, $isMinimum = false, $minimum = 0.01)
{
$isMinimum && $number = max($minimum, $number);
return sprintf('%.2f', $number);
}
public static function getArrayItemByColumn($array, $column, $value)
{
foreach ($array as $item) {
if ($item[$column] == $value) {
return $item;
}
}
return false;
}
public static function getArrayColumnSum($array, $column)
{
$sum = 0;
foreach ($array as $item) {
$sum += $item[$column] * 100;
}
return $sum / 100;
}
public static function setDataAttribute(&$source, $defaultData, $isArray = false)
{
if (!$isArray) $dataSource = [&$source]; else $dataSource = &$source;
foreach ($dataSource as &$item) {
foreach ($defaultData as $key => $value) {
$item[$key] = $value;
}
}
return $source;
}
public static function bcsub($leftOperand, $rightOperand, $scale = 2)
{
return \bcsub($leftOperand, $rightOperand, $scale);
}
public static function bcadd($leftOperand, $rightOperand, $scale = 2)
{
return \bcadd($leftOperand, $rightOperand, $scale);
}
public static function bcmul($leftOperand, $rightOperand, $scale = 2)
{
return \bcmul($leftOperand, $rightOperand, $scale);
}
public static function bcdiv($leftOperand, $rightOperand, $scale = 2)
{
return \bcdiv($leftOperand, $rightOperand, $scale);
}
public static function bccomp($leftOperand, $rightOperand, $scale = 2)
{
return \bccomp($leftOperand, $rightOperand, $scale);
}
public static function bcequal($leftOperand, $rightOperand, $scale = 2)
{
return self::bccomp($leftOperand, $rightOperand, $scale) === 0;
}
/**
* 数组转义为json
* @param array|\think\Collection $data
* @return string
*/
public static function jsonEncode($data)
{
return json_encode($data, JSON_UNESCAPED_UNICODE);
}
/**
* json转义为数组
* @param $json
* @return array
*/
public static function jsonDecode($json)
{
return json_decode($json, true);
}
}
\ No newline at end of file
......@@ -330,7 +330,8 @@ $config = [
'wx_pay' => [
'notify_url' => 'https://' . Env::get('setting.domain', 'meixz.utools.club') . '/api/Order/callback',
'vip_title' => '美行者会员VIP',
'vip_price' => 99,
'vip_price' => 99, // 新增或过期会员价
'vip_price_renew' => 69, // 老会员未过期续费价
'app_id' => 'wx1b834552a7d49bb3',
'merchant_id' => '1515838821',
'sign_type' => 'MD5',
......
......@@ -43,7 +43,7 @@ $config = [
// 是否严格检查字段是否存在
'fields_strict' => true,
// 数据集返回类型
'resultset_type' => 'array',
'resultset_type' => 'collection',
// 自动写入时间戳字段
'auto_timestamp' => false,
// 时间字段取出后的默认时间格式
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment