修复产品管理分类报错,和产品列表样式美化

This commit is contained in:
sugar1569 2018-12-20 17:25:12 +08:00
parent 9c5b89eb68
commit dbc47863ef
6 changed files with 195 additions and 147 deletions

View File

@ -1,5 +1,4 @@
<?php
namespace app\admin\controller\store;
use app\admin\controller\AuthController;

View File

@ -7,7 +7,6 @@
namespace app\admin\model\store;
use traits\ModelTrait;
use basic\ModelBasic;
use service\UtilService;
@ -20,16 +19,39 @@ class StoreCategory extends ModelBasic
{
use ModelTrait;
/*
* 异步获取分类列表
* @param $where
* @return array
*/
public static function CategoryList($where){
$data=($data=self::systemPage($where,true)->page((int)$where['page'],(int)$where['limit'])->select()) && count($data) ? $data->toArray() :[];
foreach ($data as &$item){
if($item['pid']){
$item['pid_name'] = self::where('id',$item['pid'])->value('cate_name');
}else{
$item['pid_name'] = '顶级';
}
}
$count=self::systemPage($where,true)->count();
return compact('count','data');
}
/**
* @param $where
* @return array
*/
public static function systemPage($where){
public static function systemPage($where,$isAjax=false){
$model = new self;
if($where['pid'] != '') $model = $model->where('pid',$where['pid']);
else if($where['pid']=='' && $where['cate_name']=='') $model = $model->where('pid',0);
if($where['is_show'] != '') $model = $model->where('is_show',$where['is_show']);
if($where['cate_name'] != '') $model = $model->where('cate_name','LIKE',"%$where[cate_name]%");
if($isAjax===true){
if(isset($where['order']) && $where['order']!=''){
$model=$model->order(self::setOrder($where['order']));
}
return $model;
}
return self::page($model,function ($item){
if($item['pid']){
$item['pid_name'] = self::where('id',$item['pid'])->value('cate_name');

View File

@ -1,133 +1,172 @@
{extend name="public/container"}
{block name="content"}
<div class="row">
<div class="col-sm-12">
<div class="ibox">
<div class="ibox-title">
<a type="button" class="btn btn-w-m btn-primary" href="{:Url('index')}">分类首页</a>
<button type="button" class="btn btn-w-m btn-primary" onclick="$eb.createModalFrame(this.innerText,'{:Url('create')}')">添加分类</button>
<div class="ibox-tools">
<div class="layui-fluid">
<div class="layui-row layui-col-space15" id="app">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-header">搜索条件</div>
<div class="layui-card-body">
<form class="layui-form layui-form-pane" action="">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">所有分类</label>
<div class="layui-input-block">
<select name="is_show">
<option value="">是否显示</option>
<option value="1">显示</option>
<option value="0">不显示</option>
</select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">所有分类</label>
<div class="layui-input-block">
<select name="pid">
<option value="">所有菜单</option>
{volist name="cate" id="vo"}
<option value="{$vo.id}">{$vo.html}{$vo.cate_name}</option>
{/volist}
</select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">产品名称</label>
<div class="layui-input-block">
<input type="text" name="cate_name" class="layui-input" placeholder="请输入分类名称">
</div>
</div>
<div class="layui-inline">
<div class="layui-input-inline">
<button class="layui-btn layui-btn-sm layui-btn-normal" lay-submit="search" lay-filter="search">
<i class="layui-icon layui-icon-search"></i>搜索</button>
</div>
</div>
</div>
</form>
</div>
</div>
<div class="ibox-content">
<div class="row">
<div class="m-b m-l">
<form action="" class="form-inline">
<select name="is_show" aria-controls="editable" class="form-control input-sm">
<option value="">是否显示</option>
<option value="1" {eq name="where.is_show" value="1"}selected="selected"{/eq}>显示</option>
<option value="0" {eq name="where.is_show" value="0"}selected="selected"{/eq}>不显示</option>
</select>
<select name="pid" aria-controls="editable" class="form-control input-sm">
<option value="">所有菜单</option>
{volist name="cate" id="vo"}
<option value="{$vo.id}" {eq name="where.pid" value="$vo.id"}selected="selected"{/eq}>{$vo.html}{$vo.cate_name}</option>
{/volist}
</select>
<div class="input-group">
<input type="text" name="cate_name" value="{$where.cate_name}" placeholder="请输入分类名称" class="input-sm form-control"> <span class="input-group-btn">
<button type="submit" class="btn btn-sm btn-primary"><i class="fa fa-search" ></i> 搜索</button> </span>
</div>
</form>
</div>
<!--产品列表-->
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-header">分类列表</div>
<div class="layui-card-body">
<div class="alert alert-info" role="alert">
:点击父级名称可查看子集分类,点击分页首页可返回顶级分类;分类名称和排序可进行快速编辑;
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
</div>
<div class="layui-btn-container">
<a class="layui-btn layui-btn-sm" href="{:Url('index')}">分类首页</a>
<button type="button" class="layui-btn layui-btn-sm" onclick="$eb.createModalFrame(this.innerText,'{:Url('create')}')">添加分类</button>
</div>
<table class="layui-hide" id="List" lay-filter="List"></table>
<script type="text/html" id="pic">
<img style="cursor: pointer" lay-event='open_image' src="{{d.pic}}">
</script>
<script type="text/html" id="is_show">
<input type='checkbox' name='id' lay-skin='switch' value="{{d.id}}" lay-filter='is_show' lay-text='显|隐' {{ d.is_show == 1 ? 'checked' : '' }}>
</script>
<script type="text/html" id="pid">
<a href="{:Url('index')}?pid={{d.id}}">查看</a>
</script>
<script type="text/html" id="act">
<button class="layui-btn layui-btn-xs" onclick="$eb.createModalFrame('编辑','{:Url('edit')}?id={{d.id}}')">
<i class="fa fa-paste"></i> 编辑
</button>
<button class="layui-btn layui-btn-xs" lay-event='delstor'>
<i class="fa fa-warning"></i> 删除
</button>
</script>
</div>
<div class="table-responsive" style="overflow:visible">
<table class="table table-striped table-bordered">
<thead>
<tr>
<th class="text-center" style="width: 40px;">编号</th>
<th class="text-center">父级</th>
<th class="text-center">分类名称</th>
<th class="text-center">分类图标</th>
<th class="text-center">排序</th>
<th class="text-center">是否显示</th>
<th class="text-center" width="5%">操作</th>
</tr>
</thead>
<tbody class="">
{volist name="list" id="vo"}
<tr>
<td class="text-center">
{$vo.id}
</td>
<td class="text-center">
{$vo.pid_name}
</td>
<td class="text-center">
<a href="{:Url('index',array('pid'=>$vo['id']))}"> {$vo.cate_name}</a>
</td>
<td class="text-center">
<img src="{$vo.pic}" alt="{$vo.cate_name}" class="open_image" data-image="{$vo.pic}" style="width: 50px;height: 50px;cursor: pointer;">
</td>
<td class="text-center">
{$vo.sort}
</td>
<td class="text-center">
<i class="fa {eq name='vo.is_show' value='1'}fa-check text-navy{else/}fa-close text-danger{/eq}"></i>
</td>
<td class="text-center">
<div class="input-group-btn js-group-btn" style="min-width: 106px;">
<div class="btn-group">
<button data-toggle="dropdown" class="btn btn-warning btn-xs dropdown-toggle"
aria-expanded="false">操作
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li>
<a href="javascript:void(0);"onclick="$eb.createModalFrame('编辑','{:Url('edit',array('id'=>$vo['id']))}')">
<i class="fa fa-paste"></i> 编辑
</a>
</li>
<li>
<a href="javascript:void(0);" class="delstor" data-url="{:Url('delete',array('id'=>$vo['id']))}">
<i class="fa fa-warning"></i> 删除
</a>
</li>
</ul>
</div>
</div>
</td>
</tr>
{/volist}
</tbody>
</table>
</div>
{include file="public/inner_page"}
</div>
</div>
</div>
</div>
<script src="{__ADMIN_PATH}js/layuiList.js"></script>
{/block}
{block name="script"}
<script>
$('.js-group-btn').on('click',function(){
$('.js-group-btn').css({zIndex:1});
$(this).css({zIndex:2});
setTimeout(function () {
$('.alert-info').hide();
},3000);
//实例化form
layList.form.render();
//加载列表
layList.tableList('List',"{:Url('category_list',['pid'=>$pid])}",function (){
return [
{field: 'id', title: 'ID', sort: true,event:'id',width:'6%'},
{field: 'pid_name', title: '父级'},
{field: 'cate_name', title: '分类名称',edit:'cate_name'},
{field: 'pid', title: '查看子分类',templet:'#pid'},
{field: 'pic', title: '分类图标',templet:'#pic'},
{field: 'sort', title: '排序',sort: true,event:'sort',edit:'sort',width:'8%'},
{field: 'is_show', title: '状态',templet:'#is_show',width:'6%'},
{field: 'right', title: '操作',align:'center',toolbar:'#act',width:'14%'},
];
});
$('.delstor').on('click',function(){
window.t = $(this);
var _this = $(this),url =_this.data('url');
$eb.$swal('delete',function(){
$eb.axios.get(url).then(function(res){
console.log(res);
if(res.status == 200 && res.data.code == 200) {
$eb.$swal('success',res.data.msg);
_this.parents('tr').remove();
}else
return Promise.reject(res.data.msg || '删除失败')
}).catch(function(err){
$eb.$swal('error',err);
//自定义方法
var action= {
set_category: function (field, id, value) {
layList.baseGet(layList.Url({
c: 'store.store_category',
a: 'set_category',
q: {field: field, id: id, value: value}
}), function (res) {
layList.msg(res.msg);
});
})
},
}
//查询
layList.search('search',function(where){
layList.reload(where);
});
$(".open_image").on('click',function (e) {
var image = $(this).data('image');
$eb.openImage(image);
layList.switch('is_show',function (odj,value) {
if(odj.elem.checked==true){
layList.baseGet(layList.Url({c:'store.store_category',a:'set_show',p:{is_show:1,id:value}}),function (res) {
layList.msg(res.msg);
});
}else{
layList.baseGet(layList.Url({c:'store.store_category',a:'set_show',p:{is_show:0,id:value}}),function (res) {
layList.msg(res.msg);
});
}
});
//快速编辑
layList.edit(function (obj) {
var id=obj.data.id,value=obj.value;
switch (obj.field) {
case 'cate_name':
action.set_category('cate_name',id,value);
break;
case 'sort':
action.set_category('sort',id,value);
break;
}
});
//监听并执行排序
layList.sort(['id','sort'],true);
//点击事件绑定
layList.tool(function (event,data,obj) {
switch (event) {
case 'delstor':
var url=layList.U({c:'store.store_category',a:'delete',q:{id:data.id}});
$eb.$swal('delete',function(){
$eb.axios.get(url).then(function(res){
if(res.status == 200 && res.data.code == 200) {
$eb.$swal('success',res.data.msg);
obj.del();
}else
return Promise.reject(res.data.msg || '删除失败')
}).catch(function(err){
$eb.$swal('error',err);
});
})
break;
case 'open_image':
$eb.openImage(data.pic);
break;
}
})
</script>
{/block}

View File

@ -71,7 +71,7 @@
<div class="layui-btn-container">
{switch name='type'}
{case value="1"}
<button class="layui-btn layui-btn-sm" onclick="$eb.createModalFrame(this.innerText,'{:Url('create')}',{h:760,w:1100})">添加产品</button>
<button class="layui-btn layui-btn-sm" onclick="$eb.createModalFrame(this.innerText,'{:Url('create')}',{h:700,w:1100})">添加产品</button>
{/case}
{case value="2"}
<button class="layui-btn layui-btn-sm" data-type="show">批量上架</button>
@ -175,15 +175,15 @@
case 2:
join=[
{type:'checkbox'},
{field: 'id', title: 'ID', sort: true,event:'id',width:'5%'},
{field: 'image', title: '产品图片',templet:'#image'},
{field: 'id', title: 'ID', sort: true,event:'id',width:'6%'},
{field: 'image', title: '产品图片',templet:'#image',width:'10%'},
{field: 'store_name', title: '产品名称',templet:'#store_name'},
{field: 'price', title: '产品价格',edit:'price'},
{field: 'ficti', title: '虚拟销量',edit:'ficti'},
{field: 'stock', title: '库存',edit:'stock'},
{field: 'sort', title: '排序',edit:'sort'},
{field: 'sales', title: '销量',sort: true,event:'sales'},
{field: 'status', title: '状态',templet:"#checkboxstatus"},
{field: 'price', title: '价格',edit:'price',width:'8%'},
{field: 'ficti', title: '虚拟销量',edit:'ficti',width:'8%'},
{field: 'stock', title: '库存',edit:'stock',width:'6%'},
{field: 'sort', title: '排序',edit:'sort',width:'6%'},
{field: 'sales', title: '销量',sort: true,event:'sales',width:'6%'},
{field: 'status', title: '状态',templet:"#checkboxstatus",width:'8%'},
{field: 'right', title: '操作',align:'center',toolbar:'#act',width:'14%'},
];
break;

View File

@ -27,25 +27,24 @@ class WechatService
{
private static $instance = null;
/**获取微信配置参数
* @return array
*/
public static function options()
{
$wechat = SystemConfigService::more(['wechat_appid','wechat_appsecret','wechat_token']);
$wechat = SystemConfigService::more(['wechat_appid','wechat_appsecret','wechat_token','wechat_encodingaeskey','wechat_encode']);
$payment = SystemConfigService::more(['pay_weixin_mchid','pay_weixin_client_cert','pay_weixin_client_key','pay_weixin_key','pay_weixin_open']);
$config = [
'app_id'=>isset($wechat['wechat_appid']) ? trim($wechat['wechat_appid']):'',
'secret'=>isset($wechat['wechat_appsecret']) ? trim($wechat['wechat_appsecret']):'',
'token'=>isset($wechat['wechat_token']) ? trim($wechat['wechat_token']):'',
'app_id'=>isset($wechat['wechat_appid']) ? $wechat['wechat_appid']:'',
'secret'=>isset($wechat['wechat_appsecret']) ? $wechat['wechat_appsecret']:'',
'token'=>isset($wechat['wechat_token']) ? $wechat['wechat_token']:'',
'guzzle' => [
'timeout' => 10.0, // 超时时间(秒)
],
];
if((int)$wechat['wechat_encode']>0 && isset($wechat['wechat_encodingaeskey']) && !empty($wechat['wechat_encodingaeskey']))
$config['aes_key'] = $wechat['wechat_encodingaeskey'];
if(isset($payment['pay_weixin_open']) && $payment['pay_weixin_open'] == 1){
$config['payment'] = [
'merchant_id'=>trim($payment['pay_weixin_mchid']),
'key'=>trim($payment['pay_weixin_key']),
'merchant_id'=>$payment['pay_weixin_mchid'],
'key'=>$payment['pay_weixin_key'],
'cert_path'=>realpath('.'.$payment['pay_weixin_client_cert']),
'key_path'=>realpath('.'.$payment['pay_weixin_client_key']),
'notify_url'=>SystemConfigService::get('site_url').Url::build('wap/Wechat/notify')
@ -62,9 +61,6 @@ class WechatService
return self::$instance;
}
/**
* 微信接口
*/
public static function serve()
{
$wechat = self::application(true);
@ -133,6 +129,7 @@ class WechatService
$response = HookService::resultListen('wechat_message_other',$message,null,true,$behavior);
break;
}
return $response;
});
}
@ -370,11 +367,6 @@ class WechatService
return self::paymentService()->refund($orderNo,$refundNo,$totalFee,$refundFee,$opUserId,$type,$refundAccount,$refundReason);
}
/**订单退款
* @param $orderNo
* @param array $opt
* @return bool
*/
public static function payOrderRefund($orderNo, array $opt)
{
if(!isset($opt['pay_price'])) exception('缺少pay_price');
@ -420,10 +412,6 @@ class WechatService
return self::application()->js;
}
/** jsSdk
* @param string $url
* @return array|string
*/
public static function jsSdk($url = '')
{
$apiList = ['onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone', 'startRecord', 'stopRecord', 'onVoiceRecordEnd', 'playVoice', 'pauseVoice', 'stopVoice', 'onVoicePlayEnd', 'uploadVoice', 'downloadVoice', 'chooseImage', 'previewImage', 'uploadImage', 'downloadImage', 'translateVoice', 'getNetworkType', 'openLocation', 'getLocation', 'hideOptionMenu', 'showOptionMenu', 'hideMenuItems', 'showMenuItems', 'hideAllNonBaseMenuItem', 'showAllNonBaseMenuItem', 'closeWindow', 'scanQRCode', 'chooseWXPay', 'openProductSpecificView', 'addCard', 'chooseCard', 'openCard'];

View File

@ -66,7 +66,7 @@ Page({
})
setTimeout(function () {
wx.navigateTo({ //跳转至指定页面并关闭其他打开的所有页面(这个最好用在返回至首页的的时候)
url: '/pages/orders-con/orders-con?order_id=' + data.result.orderId
url: '/pages/orders-con/orders-con?order_id=' + data.result.order_id
})
}, 1200)
},