Ver Fonte

提现限制

Kirin há 2 anos atrás
pai
commit
80ed92535f

+ 210 - 0
app/admin/controller/system/SystemStoreCategory.php

@@ -0,0 +1,210 @@
+<?php
+
+namespace app\admin\controller\system;
+
+use app\admin\controller\AuthController;
+use think\Request;
+use think\facade\Route as Url;
+use app\admin\model\system\SystemAttachment;
+use app\admin\model\system\SystemStoreCategory as CategoryModel;
+use crmeb\services\{FormBuilder as Form, JsonService as Json, UtilService as Util};
+
+/**
+ * 产品分类控制器
+ * Class StoreCategory
+ * @package app\admin\controller\system
+ */
+class SystemStoreCategory extends AuthController
+{
+    /**
+     * 显示资源列表
+     *
+     * @return \think\Response
+     */
+    public function index()
+    {
+        $this->assign('pid', $this->request->get('pid', 0));
+        $this->assign('cate', CategoryModel::getTierList(null, 0));
+        $this->assign('type',0);
+        return $this->fetch();
+    }
+    public function index1()
+    {
+        $this->assign('pid', $this->request->get('pid', 0));
+        $this->assign('cate', CategoryModel::getTierList(null, 0,1));
+        $this->assign('type',1);
+        return $this->fetch('index');
+    }
+
+    /*
+     *  异步获取分类列表
+     *  @return json
+     */
+    public function category_list()
+    {
+        $where = Util::getMore([
+            ['is_show', ''],
+            ['pid', $this->request->param('pid', '')],
+            ['cate_name', ''],
+            ['page', 1],
+            ['limit', 20],
+            ['order', ''],
+            ['type',0]
+        ]);
+        return Json::successlayui(CategoryModel::CategoryList($where));
+    }
+
+    /**
+     * 设置产品分类上架|下架
+     * @param string $is_show
+     * @param string $id
+     */
+    public function set_show($is_show = '', $id = '')
+    {
+        ($is_show == '' || $id == '') && Json::fail('缺少参数');
+        if (CategoryModel::setCategoryShow($id, (int)$is_show)) {
+            return Json::successful($is_show == 1 ? '显示成功' : '隐藏成功');
+        } else {
+            return Json::fail(CategoryModel::getErrorInfo($is_show == 1 ? '显示失败' : '隐藏失败'));
+        }
+    }
+
+    /**
+     * 快速编辑
+     * @param string $field
+     * @param string $id
+     * @param string $value
+     */
+    public function set_category($field = '', $id = '', $value = '')
+    {
+        $field == '' || $id == '' || $value == '' && Json::fail('缺少参数');
+        if (CategoryModel::where('id', $id)->update([$field => $value]))
+            return Json::successful('保存成功');
+        else
+            return Json::fail('保存失败');
+    }
+
+    /**
+     * 显示创建资源表单页.
+     *
+     * @return \think\Response
+     */
+    public function create($type=0)
+    {
+        $field = [
+            Form::select('pid', '父级')->setOptions(function () use($type){
+                $list = CategoryModel::getTierList(null, 0,$type);
+                $menus = [['value' => 0, 'label' => '顶级菜单']];
+                foreach ($list as $menu) {
+                    $menus[] = ['value' => $menu['id'], 'label' => $menu['html'] . $menu['cate_name']];
+                }
+                return $menus;
+            })->filterable(1),
+            Form::input('cate_name', '分类名称'),
+            Form::frameImageOne('pic', '分类图标(180*180)', Url::buildUrl('admin/widget.images/index', array('fodder' => 'pic')))->icon('image')->width('100%')->height('500px'),
+            Form::number('sort', '排序'),
+            Form::radio('is_show', '状态', 1)->options([['label' => '显示', 'value' => 1], ['label' => '隐藏', 'value' => 0]]),
+            Form::hidden('type',$type),
+
+        ];
+        $form = Form::make_post_form('添加分类', $field, Url::buildUrl('save'), 2);
+        $this->assign(compact('form'));
+        return $this->fetch('public/form-builder');
+    }
+
+    /**
+     * 保存新建的资源
+     *
+     * @param \think\Request $request
+     * @return \think\Response
+     */
+    public function save(Request $request)
+    {
+        $data = Util::postMore([
+            'pid',
+            'cate_name',
+            ['pic', []],
+            'sort',
+            ['is_show', 0],
+            ['type',0]
+        ], $request);
+        if ($data['pid'] == '') return Json::fail('请选择父类');
+        if (!$data['cate_name']) return Json::fail('请输入分类名称');
+        if (count($data['pic']) < 1) return Json::fail('请上传分类图标');
+        if ($data['sort'] < 0) $data['sort'] = 0;
+        $data['pic'] = $data['pic'][0];
+        $data['add_time'] = time();
+        CategoryModel::create($data);
+        return Json::successful('添加分类成功!');
+    }
+
+    /**
+     * 显示编辑资源表单页.
+     *
+     * @param int $id
+     * @return \think\Response
+     */
+    public function edit($id)
+    {
+        $c = CategoryModel::get($id);
+        if (!$c) return Json::fail('数据不存在!');
+        $field = [
+            Form::select('pid', '父级', (string)$c->getData('pid'))->setOptions(function () use ($id) {
+                $list = CategoryModel::getTierList(CategoryModel::where('id', '<>', $id), 0);
+//                $list = (sort_list_tier((CategoryModel::where('id','<>',$id)->select()->toArray(),'顶级','pid','cate_name'));
+                $menus = [['value' => 0, 'label' => '顶级菜单']];
+                foreach ($list as $menu) {
+                    $menus[] = ['value' => $menu['id'], 'label' => $menu['html'] . $menu['cate_name']];
+                }
+                return $menus;
+            })->filterable(1),
+            Form::input('cate_name', '分类名称', $c->getData('cate_name')),
+            Form::frameImageOne('pic', '分类图标', Url::buildUrl('admin/widget.images/index', array('fodder' => 'pic')), $c->getData('pic'))->icon('image')->width('100%')->height('500px'),
+            Form::number('sort', '排序', $c->getData('sort')),
+            Form::radio('is_show', '状态', $c->getData('is_show'))->options([['label' => '显示', 'value' => 1], ['label' => '隐藏', 'value' => 0]])
+        ];
+        $form = Form::make_post_form('编辑分类', $field, Url::buildUrl('update', array('id' => $id)), 2);
+
+        $this->assign(compact('form'));
+        return $this->fetch('public/form-builder');
+    }
+
+    /**
+     * 保存更新的资源
+     *
+     * @param \think\Request $request
+     * @param int $id
+     * @return \think\Response
+     */
+    public function update(Request $request, $id)
+    {
+        $data = Util::postMore([
+            'pid',
+            'cate_name',
+            ['pic', []],
+            'sort',
+            ['is_show', 0]
+        ], $request);
+        if ($data['pid'] == '') return Json::fail('请选择父类');
+        if (!$data['cate_name']) return Json::fail('请输入分类名称');
+        if (count($data['pic']) < 1) return Json::fail('请上传分类图标');
+        if ($data['sort'] < 0) $data['sort'] = 0;
+        $data['pic'] = $data['pic'][0];
+        CategoryModel::edit($data, $id);
+        return Json::successful('修改成功!');
+    }
+
+    /**
+     * 删除指定资源
+     *
+     * @param int $id
+     * @return \think\Response
+     */
+    public function delete($id)
+    {
+        if (!CategoryModel::delCategory($id))
+            return Json::fail(CategoryModel::getErrorInfo('删除失败,请稍候再试!'));
+        else
+            return Json::successful('删除成功!');
+    }
+}

+ 146 - 0
app/admin/model/system/SystemStoreCategory.php

@@ -0,0 +1,146 @@
+<?php
+/**
+ * @author: xaboy<365615158@qq.com>
+ * @day: 2017/11/11
+ */
+
+namespace app\admin\model\system;
+
+use crmeb\traits\ModelTrait;
+use crmeb\basic\BaseModel;
+
+/**
+ * Class StoreCategory
+ * @package app\admin\model\store
+ */
+class SystemStoreCategory extends BaseModel
+{
+
+    /**
+     * 数据表主键
+     * @var string
+     */
+    protected $pk = 'id';
+
+    /**
+     * 模型名称
+     * @var string
+     */
+    protected $name = 'system_store_category';
+
+    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, $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 (isset($where['type']) && $where['type'] >-1) $model = $model->where('type', $where['type']);
+        if ($isAjax === true) {
+            if (isset($where['order']) && $where['order'] != '') {
+                $model = $model->order(self::setOrder($where['order']));
+            } else {
+                $model = $model->order('sort desc,id desc');
+            }
+            return $model;
+        }
+        return self::page($model, function ($item) {
+            if ($item['pid']) {
+                $item['pid_name'] = self::where('id', $item['pid'])->value('cate_name');
+            } else {
+                $item['pid_name'] = '顶级';
+            }
+        }, $where);
+    }
+
+    /**
+     * 获取顶级分类
+     * @return array
+     */
+    public static function getCategory()
+    {
+        return self::where('is_show', 1)->column('cate_name', 'id');
+    }
+
+    /**
+     * 分级排序列表
+     * @param null $model
+     * @param int $pid
+     * @return array
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @throws \think\exception\DbException
+     */
+    public static function getTierList($model = null, $pid = 0,$type=0)
+    {
+        if ($model === null) $model = new self();
+        if (!$pid) return sort_list_tier($model->order('sort desc,id desc')->where('pid', 0)->where('type',$type)->select()->toArray());
+        return sort_list_tier($model->order('sort desc,id desc')->where('type',$type)->select()->toArray());
+    }
+
+    public static function delCategory($id)
+    {
+        $count = self::where('pid', $id)->count();
+        if ($count)
+            return self::setErrorInfo('请先删除下级子分类');
+        else {
+            return self::del($id);
+        }
+    }
+
+    /**
+     * 产品分类隐藏显示
+     * @param $id
+     * @param $show
+     * @return bool
+     */
+    public static function setCategoryShow($id, $show)
+    {
+        $count = self::where('id', $id)->count();
+        if (!$count) return self::setErrorInfo('参数错误');
+        $count = self::where('id', $id)->where('is_show', $show)->count();
+        if ($count) return true;
+        $pid = self::where('id', $id)->value('pid');
+        self::beginTrans();
+        $res1 = true;
+        $res2 = self::where('id', $id)->update(['is_show' => $show]);
+        if (!$pid) {//一级分类隐藏
+            $count = self::where('pid', $id)->count();
+            if ($count) {
+                $count      = self::where('pid', $id)->where('is_show', $show)->count();
+                $countWhole = self::where('pid', $id)->count();
+                if (!$count || $countWhole > $count) {
+                    $res1 = self::where('pid', $id)->update(['is_show' => $show]);
+                }
+            }
+        }
+        $res = $res1 && $res2;
+        self::checkTrans($res);
+        return $res;
+    }
+}

+ 176 - 0
app/admin/view/system/system_store_category/index.php

@@ -0,0 +1,176 @@
+{extend name="public/container"}
+{block name="content"}
+
+<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>
+        <!--产品列表-->
+        <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="{eq name="type" value="0"}{:Url('index')}{else/}{:Url('index1')}{/eq}">分类首页</a>
+                        <button type="button" class="layui-btn layui-btn-sm" onclick="$eb.createModalFrame(this.innerText,'{:Url('create',['type'=>$type])}')">添加分类</button>
+                    </div>
+                    <table class="layui-hide" id="List" lay-filter="List"></table>
+                    <script type="text/html" id="pic">
+                        {{# if(d.pic){ }}
+                        <img style="cursor: pointer" lay-event='open_image' src="{{d.pic}}">
+                        {{# }else{ }}
+                        暂无图片
+                        {{# } }}
+                    </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-edit"></i> 编辑
+                        </button>
+                        <button class="layui-btn btn-danger layui-btn-xs" lay-event='delstor'>
+                            <i class="fa fa-times"></i> 删除
+                        </button>
+                    </script>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="{__ADMIN_PATH}js/layuiList.js"></script>
+{/block}
+{block name="script"}
+<script>
+    setTimeout(function () {
+        $('.alert-info').hide();
+    },3000);
+    //实例化form
+    layList.form.render();
+    //加载列表
+    layList.tableList('List',"{:Url('category_list',['pid'=>$pid,'type'=>$type])}",function (){
+        return [
+            {field: 'id', title: 'ID', sort: true,event:'id',width:'4%',align:'center'},
+            {field: 'pid_name', title: '父级',align:'center'},
+            {field: 'cate_name', title: '分类名称',edit:'cate_name',align:'center'},
+            {field: 'pid', title: '查看子分类',templet:'#pid',align:'center',width:'8%'},
+            {field: 'pic', title: '分类图标',templet:'#pic',align:'center'},
+            {field: 'sort', title: '排序',sort: true,event:'sort',edit:'sort',width:'8%',align:'center'},
+            {field: 'is_show', title: '状态',templet:'#is_show',width:'10%',align:'center'},
+            {field: 'right', title: '操作',align:'center',toolbar:'#act',width:'10%',align:'center'},
+        ];
+    });
+    //自定义方法
+    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,true);
+    });
+    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}