邹景立 4 éve
szülő
commit
5970a1dbf5

+ 1 - 1
app/data/command/UserLevel.php → app/data/command/UserUpgrade.php

@@ -13,7 +13,7 @@ use think\console\Output;
  * Class UserLevel
  * @package app\data\command
  */
-class UserLevel extends Command
+class UserUpgrade extends Command
 {
     protected function configure()
     {

+ 16 - 16
app/data/controller/ShopGoods.php

@@ -51,7 +51,7 @@ class ShopGoods extends Controller
         elseif ($this->type === 'recycle') $query->where(['deleted' => 1]);
         else $this->error("无法加载 {$this->type} 数据列表!");
         // 列表排序并显示
-        $query->like('code,name,mark')->equal('status,cate');
+        $query->like('code,name,marks,cateids')->equal('status');
         $query->order('sort desc,id desc')->page();
     }
 
@@ -65,7 +65,7 @@ class ShopGoods extends Controller
     public function select()
     {
         $query = $this->_query($this->table);
-        $query->equal('status,cate')->like('code,name,mark');
+        $query->equal('status')->like('code,name,marks')->in('cates');
         $query->where(['deleted' => 0])->order('sort desc,id desc')->page();
     }
 
@@ -78,13 +78,9 @@ class ShopGoods extends Controller
      */
     protected function _page_filter(array &$data)
     {
-        $this->marks = GoodsService::instance()->getMarkList();
-        $this->clist = GoodsService::instance()->getCateList('arr2table');
-        $clist = $this->app->db->name('ShopGoodsCate')->whereIn('id', array_column($data, 'cate'))->column('pid,name,status', 'id');
-        foreach ($data as &$vo) {
-            $vo['cate'] = $clist[$vo['cate']] ?? $vo['cate'];
-            $vo['mark'] = str2arr($vo['mark'] ?: '', ',', $this->marks);
-        }
+        $this->marks = GoodsService::instance()->getMarkData();
+        $this->cates = GoodsService::instance()->getCateData();
+        GoodsService::instance()->buildItemData($data, false);
     }
 
     /**
@@ -153,12 +149,15 @@ class ShopGoods extends Controller
             $data['code'] = CodeExtend::uniqidNumber(14, 'G');
         }
         if ($this->request->isGet()) {
-            $data['mark'] = str2arr($data['mark'] ?? '');
-            $this->marks = GoodsService::instance()->getMarkList();
-            $this->cates = GoodsService::instance()->getCateList('arr2table');
-            $this->levels = $this->app->db->name('DataUserLevel')->where(['status' => 1])->order('number asc,id desc')->select()->toArray();
-            $this->trucks = $this->app->db->name('ShopTruckTemplate')->where(['status' => 1, 'deleted' => 0])->order('sort desc,id desc')->column('code,name');
-            $this->discounts = $this->app->db->name('DataUserDiscount')->where(['status' => 1, 'deleted' => 0])->order('sort desc,id desc')->select()->toArray();
+            $data['marks'] = str2arr($data['marks'] ?? '');
+            $data['payment'] = str2arr($data['payment'] ?? '');
+            $data['cateids'] = str2arr($data['cateids'] ?? '');
+            $this->marks = GoodsService::instance()->getMarkData();
+            $this->cates = GoodsService::instance()->getCateData();
+            $this->trucks = $this->app->db->name('ShopTruckTemplate')->where(['status' => 1, 'deleted' => 0])->order('sort desc,id desc')->column('code,name', 'code');
+            $this->payments = $this->app->db->name('ShopPayment')->where(['status' => 1, 'deleted' => 0])->order('sort desc,id desc')->column('type,code,name', 'code');
+            $this->upgrades = $this->app->db->name('DataUserUpgrade')->where(['status' => 1, 'deleted' => 0])->order('number asc,id desc')->column('number,name', 'id');
+            $this->discounts = $this->app->db->name('DataUserDiscount')->where(['status' => 1, 'deleted' => 0])->order('sort desc,id desc')->column('id,name,items', 'id');
             // 商品规格处理
             $fields = 'goods_sku `sku`,goods_code,goods_spec `key`,price_selling `selling`,price_market `market`,number_virtual `virtual`,number_express `express`,reward_balance `balance`,reward_integral `integral`,status';
             $data['data_items'] = json_encode($this->app->db->name('ShopGoodsItem')->where(['goods_code' => $data['code']])->column($fields, 'goods_spec'), JSON_UNESCAPED_UNICODE);
@@ -169,7 +168,8 @@ class ShopGoods extends Controller
             [$count, $items] = [0, array_column(json_decode($data['data_items'], true), 0)];
             foreach ($items as $item) $count += intval($item['status']);
             if (empty($count)) $this->error('无效的的商品价格信息!');
-            $data['mark'] = arr2str($data['mark'] ?? []);
+            $data['marks'] = arr2str($data['marks'] ?? []);
+            $data['payment'] = arr2str($data['payment'] ?? []);
             if (empty($data['price_market'])) $data['price_market'] = min(array_column($items, 'market'));
             if (empty($data['price_selling'])) $data['price_selling'] = min(array_column($items, 'selling'));
             $this->app->db->name('ShopGoodsItem')->where(['goods_code' => $data['code']])->update(['status' => 0]);

+ 1 - 1
app/data/controller/UserDiscount.php

@@ -84,7 +84,7 @@ class UserDiscount extends Controller
             }
             $vo['items'] = json_encode($rule, JSON_UNESCAPED_UNICODE);
         } else {
-            $query = $this->app->db->name('DataUserLevel');
+            $query = $this->app->db->name('DataUserUpgrade');
             $this->levels = $query->where(['status' => 1])->order('number asc')->select()->toArray();
             if (empty($this->levels)) $this->error('未配置用户等级!');
             if (!empty($vo['items'])) foreach (json_decode($vo['items'], true) as $item) {

+ 3 - 3
app/data/controller/UserLevel.php → app/data/controller/UserUpgrade.php

@@ -7,16 +7,16 @@ use think\admin\Controller;
 
 /**
  * 用户等级管理
- * Class UserLevel
+ * Class UserUpgrade
  * @package app\data\controller
  */
-class UserLevel extends Controller
+class UserUpgrade extends Controller
 {
     /**
      * 绑定数据表
      * @var string
      */
-    private $table = 'DataUserLevel';
+    private $table = 'DataUserUpgrade';
 
     /**
      * 用户等级管理

+ 1 - 1
app/data/controller/api/Auth.php

@@ -43,7 +43,7 @@ abstract class Auth extends Controller
     protected function initialize()
     {
         // 接口数据类型
-        $this->type = input('api') ?: $this->request->header('api-name');
+        $this->type = $this->request->header('api-name') ?: input('api');
         $this->type = $this->type ?: $this->request->header('api-type');
         if (empty($this->type) || empty(UserService::TYPES[$this->type])) {
             $this->error("接口通道未定义!");

+ 1 - 1
app/data/controller/api/Goods.php

@@ -29,7 +29,7 @@ class Goods extends Controller
      */
     public function getMark()
     {
-        $this->success('获取标签成功', GoodsService::instance()->getMarkList());
+        $this->success('获取标签成功', GoodsService::instance()->getMarkData());
     }
 
     /**

+ 38 - 15
app/data/service/GoodsService.php

@@ -75,10 +75,38 @@ class GoodsService extends Service
     }
 
     /**
+     * 获取分类数据
+     * @param boolean $simple 简化数据
+     * @return array
+     */
+    public function getCateData($simple = true): array
+    {
+        $cates = $this->app->db->name('ShopGoodsCate')->column('id,pid,name', 'id');
+        foreach ($cates as $cate) if (isset($cates[$cate['pid']])) {
+            $cates[$cate['id']]['parent'] =& $cates[$cate['pid']];
+        }
+        foreach ($cates as $key => $cate) {
+            $id = $cate['id'];
+            $cates[$id]['ids'][] = $cate['id'];
+            $cates[$id]['names'][] = $cate['name'];
+            while (isset($cate['parent']) && $cate = $cate['parent']) {
+                $cates[$id]['ids'][] = $cate['id'];
+                $cates[$id]['names'][] = $cate['name'];
+            }
+            $cates[$id]['ids'] = array_reverse($cates[$id]['ids']);
+            $cates[$id]['names'] = array_reverse($cates[$id]['names']);
+            if ($simple && count($cates[$id]['names']) !== $this->getCateLevel()) {
+                unset($cates[$key]);
+            }
+        }
+        return $cates;
+    }
+
+    /**
      * 获取商品标签数据
      * @return array
      */
-    public function getMarkList(): array
+    public function getMarkData(): array
     {
         $map = ['status' => 1];
         $query = $this->app->db->name('ShopGoodsMark');
@@ -88,29 +116,24 @@ class GoodsService extends Service
     /**
      * 商品数据绑定
      * @param array $data 商品主数据
+     * @param boolean $simple 简化数据
      * @return array
      * @throws \think\db\exception\DataNotFoundException
      * @throws \think\db\exception\DbException
      * @throws \think\db\exception\ModelNotFoundException
      */
-    public function buildItemData(array &$data = []): array
+    public function buildItemData(array &$data = [], $simple = true): array
     {
-        $cates = $this->app->db->name('ShopGoodsCate')->column('id,pid,name', 'id');
-        foreach ($cates as $cate) if (isset($cates[$cate['pid']])) {
-            $cates[$cate['id']]['parent'] =& $cates[$cate['pid']];
-        }
-        $codes = array_unique(array_column($data, 'code'));
-        $query = $this->app->db->name('ShopGoodsItem')->withoutField('id,status,create_at');
-        $items = $query->whereIn('goods_code', $codes)->where(['status' => 1])->select()->toArray();
+        $cates = $this->getCateData();
         $marks = $this->app->db->name('ShopGoodsMark')->where(['status' => 1])->column('name');
+        $query = $this->app->db->name('ShopGoodsItem')->withoutField('id,status,create_at');
+        $items = $query->whereIn('goods_code', array_unique(array_column($data, 'code')))->where(['status' => 1])->select()->toArray();
         foreach ($data as &$vo) {
-            $vo['marks'] = str2arr($vo['mark'], ',', $marks);
-            $vo['cates'] = $cates[$vo['cate']] ?? [];
-            $vo['slider'] = explode('|', $vo['slider']);
-            $vo['specs'] = json_decode($vo['data_specs'], true);
-            $vo['items'] = [];
+            [$vo['marks'], $vo['cateids'], $vo['cateinfo']] = [str2arr($vo['marks'], ',', $marks), str2arr($vo['cateids']), []];
+            foreach ($cates as $cate) if (in_array($cate['id'], $vo['cateids'])) $vo['cateinfo'] = $cate;
+            [$vo['slider'], $vo['specs'], $vo['items']] = [str2arr($vo['slider'], '|'), json_decode($vo['data_specs'], true), []];
             foreach ($items as $item) if ($item['goods_code'] === $vo['code']) $vo['items'][] = $item;
-            unset($vo['mark'], $vo['sort'], $vo['status'], $vo['deleted'], $vo['data_items'], $vo['data_specs']);
+            if ($simple) unset($vo['marks'], $vo['sort'], $vo['status'], $vo['deleted'], $vo['data_items'], $vo['data_specs']);
         }
         return $data;
     }

+ 2 - 2
app/data/service/RebateCurrentService.php

@@ -221,7 +221,7 @@ class RebateCurrentService extends Service
         $pids = array_reverse(explode('-', trim($this->user['path'], '-')));
         if (empty($pids)) return false;
         // 获取拥有差额奖励的等级
-        $query = $this->app->db->name('DataUserLevel');
+        $query = $this->app->db->name('DataUserUpgrade');
         $numbs = $query->whereLike('rule', '%,' . self::PRIZE_05 . ',%')->column('number');
         // 获取可以参与奖励的代理
         $query = $this->app->db->name('DataUser')->whereIn('vip_number', $numbs);
@@ -275,6 +275,6 @@ class RebateCurrentService extends Service
     protected function checkLevelPrize(string $prize, int $level): bool
     {
         $map = [['number', '=', $level], ['rebate_rule', 'like', "%,{$prize},%"]];
-        return $this->app->db->name('DataUserLevel')->where($map)->count() > 0;
+        return $this->app->db->name('DataUserUpgrade')->where($map)->count() > 0;
     }
 }

+ 2 - 2
app/data/service/UserService.php

@@ -229,7 +229,7 @@ class UserService extends Service
         $teamsUsers = $this->app->db->name('DataUser')->whereLike('path', "%-{$uid}-%")->count();
         $orderAmount = $this->app->db->name('ShopOrder')->where(['uid' => $uid])->whereIn('status', [3, 4, 5])->sum('amount_total');
         // 计算用户级别
-        foreach ($this->app->db->name('DataUserLevel')->where(['status' => 1])->order('number desc')->cursor() as $item) {
+        foreach ($this->app->db->name('DataUserUpgrade')->where(['status' => 1])->order('number desc')->cursor() as $item) {
             $l1 = empty($item['goods_vip_status']) || $user['buy_vip_entry'] > 0;
             $l2 = empty($item['teams_users_status']) || $item['teams_users_number'] <= $teamsUsers;
             $l3 = empty($item['order_amount_status']) || $item['order_amount_number'] <= $orderAmount;
@@ -249,7 +249,7 @@ class UserService extends Service
         $tmpNumber = $query->whereRaw("a.uid={$uid} and a.payment_status=1 and a.status in (3,4,5) and b.vip_entry=1")->max('b.vip_number');
         if ($tmpNumber > $vipNumber) {
             $map = ['number' => $tmpNumber, 'status' => 1];
-            $levelInfo = $this->app->db->name('DataUserLevel')->where($map)->find();
+            $levelInfo = $this->app->db->name('DataUserUpgrade')->where($map)->find();
             if (!empty($levelInfo)) [$vipNumber, $vipName] = [$levelInfo['number'], $levelInfo['name']];
         }
         // 统计订单统计

+ 2 - 2
app/data/sys.php

@@ -2,15 +2,15 @@
 
 use app\data\command\OrderClear;
 use app\data\command\UserBalance;
-use app\data\command\UserLevel;
+use app\data\command\UserUpgrade;
 use app\data\command\UserTransfer;
 use think\Console;
 
 if (app()->request->isCli()) {
     Console::starting(function (Console $console) {
-        $console->addCommand(UserLevel::class);
         $console->addCommand(OrderClear::class);
         $console->addCommand(UserBalance::class);
+        $console->addCommand(UserUpgrade::class);
         $console->addCommand(UserTransfer::class);
     });
 } else {

+ 119 - 97
app/data/view/shop_goods/form.html

@@ -5,33 +5,47 @@
 <form onsubmit="return false;" id="GoodsForm" data-auto="true" method="post" class='layui-form layui-card' autocomplete="off">
     <div class="layui-card-body padding-40 padding-bottom-20">
 
-        {notempty name='marks'}
+        <!--{notempty name='cates'}-->
+        <label class="layui-form-item block relative">
+            <span class="color-green font-w7 label-required-prev">所属分类</span>
+            <span class="color-desc margin-left-5">Category Name</span>
+            <select class="layui-select" name="cateids" lay-search>
+                {foreach $cates as $cate}{if in_array($cate.id, $cate.ids)}
+                <option selected value="{:arr2str($cate.ids)}">{:join(' > ', $cate.names)}</option>
+                {else}
+                <option value="{:arr2str($cate.ids)}">{:join(' > ', $cate.names)}</option>
+                {/if}{/foreach}
+            </select>
+        </label>
+        <!--{/notempty}-->
+
+        <!--{notempty name='marks'}-->
         <div class="layui-form-item relative block">
             <span class="color-green font-w7 label-required-prev">商品标签</span>
-            <span class="color-desc margin-left-5">Mark Name</span>
-            <div class="tags-container layui-textarea">
-                {foreach $marks as $mark}{if isset($vo.mark) && is_array($vo.mark) && in_array($mark, $vo.mark)}
-                <label class="think-checkbox notselect"><input checked type="checkbox" name="mark[]" value="{$mark}" lay-ignore> {$mark}</label>
+            <span class="color-desc margin-left-5">Goods Mark Name</span>
+            <div class="layui-textarea">
+                {foreach $marks as $mark}{if isset($vo.marks) && is_array($vo.marks) && in_array($mark, $vo.marks)}
+                <input checked type="checkbox" name="marks[]" value="{$mark}" title="{$mark}">
                 {else}
-                <label class="think-checkbox notselect"><input type="checkbox" name="mark[]" value="{$mark}" lay-ignore> {$mark}</label>
+                <input type="checkbox" name="marks[]" value="{$mark}" title="{$mark}">
                 {/if}{/foreach}
             </div>
         </div>
-        {/notempty}
+        <!--{/notempty}-->
 
-        {notempty name='cates'}
-        <label class="layui-form-item block relative">
-            <span class="color-green font-w7 label-required-prev">所属分类</span>
-            <span class="color-desc margin-left-5">Category Name</span>
-            <select class="layui-select" name="cate" lay-search>
-                {foreach $cates as $cate}{if isset($vo.cate) and $vo.cate eq $cate.id}
-                <option {$cate.sat} selected value="{$cate.id}">{$cate.spl}{$cate.name|default=''}</option>
+        <!--{notempty name='payments'}-->
+        <div class="layui-form-item relative block">
+            <span class="color-green font-w7 label-required-prev">支付方式</span>
+            <span class="color-desc margin-left-5">Goods Pyament Name</span>
+            <div class="layui-textarea">
+                {foreach $payments as $payment}{if isset($vo.payment) && is_array($vo.payment) && in_array($payment.code, $vo.payment)}
+                <input checked type="checkbox" name="payment[]" value="{$payment.code}" title="{$payment.name}">
                 {else}
-                <option {$cate.sat} value="{$cate.id}">{$cate.spl}{$cate.name|default=''}</option>
+                <input type="checkbox" name="payment[]" value="{$payment.code}" title="{$payment.name}">
                 {/if}{/foreach}
-            </select>
-        </label>
-        {/notempty}
+            </div>
+        </div>
+        <!--{/notempty}-->
 
         <label class="layui-form-item block relative">
             <span class="color-green font-w7">商品名称</span>
@@ -77,91 +91,99 @@
             </table>
         </div>
 
-        <div class="layui-clear goods-item-box">
-
-            <fieldset>
-                <legend><span class="layui-badge think-bg-violet">物流配送发货</span></legend>
-                <div class="layui-form-item">
-                    {foreach ['虚拟商品,无需物流配送','实物商品,需要物流配送'] as $k=>$v}
-                    {if (isset($vo.truck_type) and $vo.truck_type eq $k) or (empty($vo.truck_type) and $k eq 0)}
-                    <input type="radio" name="truck_type" value="{$k}" title="{$v}" checked>
-                    {else}
-                    <input type="radio" name="truck_type" value="{$k}" title="{$v}">
-                    {/if}{/foreach}
-                </div>
-            </fieldset>
-
-            <fieldset>
-                <legend><span class="layui-badge think-bg-violet">入会礼包配置</span></legend>
-                <div class="layui-form-item">
-                    {foreach ['非入会礼包,购买后不会影响等级','是入会礼包,购买后升级会员级别'] as $k=>$v}
-                    {if (isset($vo.vip_entry) and $vo.vip_entry eq $k) or (empty($vo.vip_entry) and $k eq 0)}
-                    <input type="radio" name="vip_entry" value="{$k}" title="{$v}" checked lay-filter="vip_entry">
-                    {else}
-                    <input type="radio" name="vip_entry" value="{$k}" title="{$v}" lay-filter="vip_entry">
-                    {/if}{/foreach}
-                </div>
-            </fieldset>
-
-            {notempty name='levels'}
-            <fieldset>
-                <legend><span class="layui-badge think-bg-violet">升级用户级别</span></legend>
-                <label class="layui-form-item">
-                    <select name="vip_upgrade" class="layui-select" lay-filter="vip_upgrade">
-                        {foreach $levels as $level}{if isset($vo.vip_upgrade) and $vo.vip_upgrade eq $level.number}
-                        <option selected value="{$level.number|default=0}">[ {$level.number|default='0'} ] {$level.name|default=''}</option>
+        <div class="goods-item-box">
+            <div class="layui-clear">
+                <fieldset>
+                    <legend><span class="layui-badge think-bg-violet">商品返利配置</span></legend>
+                    <div class="layui-form-item">
+                        {foreach ['非返利商品,其代理不会获得奖励','是返利商品,其代理将会获得奖励'] as $k => $v}
+                        {if (isset($vo.rebate_type) and $vo.rebate_type eq $k) or (empty($vo.rebate_type) and $k eq 0)}
+                        <input type="radio" name="rebate_type" value="{$k}" title="{$v}" checked>
                         {else}
-                        <option value="{$level.number|default=0}">[ {$level.number|default='0'} ] {$level.name|default=''}</option>
+                        <input type="radio" name="rebate_type" value="{$k}" title="{$v}">
                         {/if}{/foreach}
-                    </select>
-                    <span class="help-block">购买此商品用户可直接升级至此等级!</span>
-                </label>
-            </fieldset>
-            {/notempty}
-
-            {notempty name='discounts'}
-            <fieldset>
-                <legend><span class="layui-badge think-bg-violet">用户折扣方案</span></legend>
-                <label class="layui-form-item">
-                    <select name="discount_id" class="layui-select" lay-search>
-                        <option value="0"> -- 不设置 --</option>
-                        {foreach $discounts as $discount}{if isset($vo.discount_id) and $vo.discount_id eq $discount.id}
-                        <option selected value="{$discount.id|default=0}">{$discount.name|default='0'}</option>
+                    </div>
+                </fieldset>
+                <fieldset>
+                    <legend><span class="layui-badge think-bg-violet">入会礼包配置</span></legend>
+                    <div class="layui-form-item">
+                        {foreach ['非入会礼包,购买后不会升级等级','是入会礼包,购买后升级会员级别'] as $k=>$v}
+                        {if (isset($vo.vip_entry) and $vo.vip_entry eq $k) or (empty($vo.vip_entry) and $k eq 0)}
+                        <input type="radio" name="vip_entry" value="{$k}" title="{$v}" checked lay-filter="vip_entry">
                         {else}
-                        <option value="{$discount.id|default=0}">{$discount.name|default='0'}</option>
+                        <input type="radio" name="vip_entry" value="{$k}" title="{$v}" lay-filter="vip_entry">
                         {/if}{/foreach}
-                    </select>
-                    <span class="help-block">用户级别达到规则可享有折扣!</span>
-                </label>
-            </fieldset>
-            {/notempty}
+                    </div>
+                </fieldset>
+                <!--{notempty name='upgrades'}-->
+                <fieldset>
+                    <legend><span class="layui-badge think-bg-violet">升级用户级别</span></legend>
+                    <label class="layui-form-item">
+                        <select name="vip_upgrade" class="layui-select" lay-filter="vip_upgrade">
+                            {foreach $upgrades as $upgrade}{if isset($vo.vip_upgrade) and $vo.vip_upgrade eq $upgrade.number}
+                            <option selected value="{$upgrade.number|default=0}">[ {$upgrade.number|default='0'} ] {$upgrade.name|default=''}</option>
+                            {else}
+                            <option value="{$upgrade.number|default=0}">[ {$upgrade.number|default='0'} ] {$upgrade.name|default=''}</option>
+                            {/if}{/foreach}
+                        </select>
+                        <span class="help-block">购买此商品用户可直接升级至此等级!</span>
+                    </label>
+                </fieldset>
+                <!--{/notempty}-->
+            </div>
 
-            {notempty name='levels'}
-            <fieldset>
-                <legend><span class="layui-badge think-bg-violet">限制最低购买等级</span></legend>
-                <label class="layui-form-item">
-                    <select name="limit_low_vip" class="layui-select">
-                        <option value="0"> -- 不设置 --</option>
-                        {foreach $levels as $level}{if isset($vo.limit_low_vip) and $vo.limit_low_vip eq $level.number}
-                        <option selected value="{$level.number|default=0}">[ {$level.number|default='0'} ] {$level.name|default=''}</option>
+            <div class="layui-clear">
+                <fieldset>
+                    <legend><span class="layui-badge think-bg-violet">物流配送发货类型</span></legend>
+                    <div class="layui-form-item">
+                        {foreach ['虚拟商品,无需物流配送','实物商品,需要物流配送'] as $k=>$v}
+                        {if (isset($vo.truck_type) and $vo.truck_type eq $k) or (empty($vo.truck_type) and $k eq 0)}
+                        <input type="radio" name="truck_type" value="{$k}" title="{$v}" checked>
                         {else}
-                        <option value="{$level.number|default=0}">[ {$level.number|default='0'} ] {$level.name|default=''}</option>
+                        <input type="radio" name="truck_type" value="{$k}" title="{$v}">
                         {/if}{/foreach}
-                    </select>
-                    <span class="help-block">
-                        限制此等级及低于此等级的用户不能购买!</span>
-                </label>
-            </fieldset>
-            {/notempty}
-
-            <fieldset>
-                <legend><span class="layui-badge think-bg-violet">商品限购数量</span></legend>
-                <label class="layui-form-item">
-                    <input class="layui-input" data-blur-number="0" name="limit_max_num" value="{$vo.limit_max_num|default=0}" placeholder="请输入商品限购数量">
-                    <span class="help-block">限制每人可购买数量(为 0 时不限制)!</span>
-                </label>
-            </fieldset>
-
+                    </div>
+                </fieldset>
+                <!--{notempty name='discounts'}-->
+                <fieldset>
+                    <legend><span class="layui-badge think-bg-violet">用户购买折扣方案</span></legend>
+                    <label class="layui-form-item">
+                        <select name="discount_id" class="layui-select" lay-search>
+                            <option value="0"> -- 不设置 --</option>
+                            {foreach $discounts as $discount}{if isset($vo.discount_id) and $vo.discount_id eq $discount.id}
+                            <option selected value="{$discount.id|default=0}">{$discount.name|default='0'}</option>
+                            {else}
+                            <option value="{$discount.id|default=0}">{$discount.name|default='0'}</option>
+                            {/if}{/foreach}
+                        </select>
+                        <span class="help-block">当用户等级达到指定等级后可享有折扣!</span>
+                    </label>
+                </fieldset>
+                <!--{/notempty}-->
+                <!--{notempty name='upgrades'}-->
+                <fieldset>
+                    <legend><span class="layui-badge think-bg-violet">限制最低购买等级</span></legend>
+                    <label class="layui-form-item">
+                        <select name="limit_low_vip" class="layui-select">
+                            <option value="0"> -- 不设置 --</option>
+                            {foreach $upgrades as $upgrade}{if isset($vo.limit_low_vip) and $vo.limit_low_vip eq $upgrade.number}
+                            <option selected value="{$upgrade.number|default=0}">[ {$upgrade.number|default='0'} ] {$upgrade.name|default=''}</option>
+                            {else}
+                            <option value="{$upgrade.number|default=0}">[ {$upgrade.number|default='0'} ] {$upgrade.name|default=''}</option>
+                            {/if}{/foreach}
+                        </select>
+                        <span class="help-block">限制此等级及低于此等级的用户不能购买!</span>
+                    </label>
+                </fieldset>
+                <!--{/notempty}-->
+                <fieldset>
+                    <legend><span class="layui-badge think-bg-violet">商品限购数量</span></legend>
+                    <label class="layui-form-item">
+                        <input class="layui-input" data-blur-number="0" name="limit_max_num" value="{$vo.limit_max_num|default=0}" placeholder="请输入商品限购数量">
+                        <span class="help-block">限制每人可购买数量(为 0 时不限制)!</span>
+                    </label>
+                </fieldset>
+            </div>
         </div>
 
         <div class="layui-form-item">
@@ -260,7 +282,7 @@
 
         <label class="layui-form-item block">
             <span class="font-w7 color-green">商品简介描述</span>
-            <textarea class="layui-textarea" placeholder="请输入商品简介描述" name="remark">{$vo.remark|default=''|raw}</textarea>
+            <textarea class="layui-textarea" placeholder="请输入商品简介描述" name="remarks">{$vo.remarks|default=''|raw}</textarea>
         </label>
 
         <div class="layui-form-item block">

+ 13 - 9
app/data/view/shop_goods/index.html

@@ -67,20 +67,24 @@
                         商品名称:<span>{$vo.name|default='--'}</span><br>
                     </div>
                 </td>
-                <td class="text-left">
+                <td class="text-left sub-span-blue">
                     <div>
-                        <!--{notempty name='clist'}-->
-                        所属分类:{$vo.cate.name|default='-'}<br>
-                        <!--{/notempty}-->
-                    </div>
-                    <div>
-                        {notempty name='vo.mark'}{foreach $vo.mark as $mark}
-                        <span class="notselect nowrap layui-badge layui-bg-cyan">{$mark}</span>
+                        {notempty name='vo.marks'}{foreach $vo.marks as $mark}
+                        <b class="notselect nowrap layui-badge layui-bg-cyan">{$mark}</b>
                         {/foreach}{/notempty}
                     </div>
+                    <div class="nowrap">
+                        {notempty name='vo.cateinfo'}
+                        {:join('<span class="layui-icon layui-icon-right font-s10"></span>', $vo.cateinfo.names)}<br>
+                        {/notempty}
+                    </div>
                 </td>
                 <td class='nowrap'>
-                    <div>销售状态:{eq name='vo.status' value='0'}<span class="layui-badge">已下架</span>{else}<span class="layui-badge layui-bg-green">销售中</span>{/eq}</div>
+                    <div>
+                        {eq name='vo.status' value='0'}<span class="layui-badge">已下架</span>{else}<span class="layui-badge layui-bg-green">销售中</span>{/eq}
+                        {eq name='vo.vip_entry' value='0'}<span class="layui-badge">非入会礼包</span>{else}<span class="layui-badge layui-bg-green">是入会礼包</span>{/eq}
+                        {eq name='vo.truck_type' value='0'}<span class="layui-badge">无需快递配送</span>{else}<span class="layui-badge layui-bg-green">需要快递配送</span>{/eq}
+                    </div>
                     <div>创建时间:{$vo.create_at|format_datetime}</div>
                 </td>
                 <td class='nowrap sub-span-blue'>

+ 8 - 8
app/data/view/shop_goods/index_search.html

@@ -21,26 +21,26 @@
             <label class="layui-input-inline">
                 <select class="layui-select" name="mark" lay-search>
                     <option value="">-- 全部标签 --</option>
-                    {foreach $marks as $mark}{if input('mark','') eq $mark}
-                    <option selected value="{$mark}">{$mark}</option>
+                    {foreach $marks as $mark}{if input('mark','') eq ','.$mark.','}
+                    <option selected value=",{$mark},">{$mark}</option>
                     {else}
-                    <option value="{$mark}">{$mark}</option>
+                    <option value=",{$mark},">{$mark}</option>
                     {/if}{/foreach}
                 </select>
             </label>
         </div>
         {/notempty}
 
-        {notempty name='clist'}
+        {notempty name='cates'}
         <div class="layui-form-item layui-inline">
             <label class="layui-form-label">商品分类</label>
             <label class="layui-input-inline">
-                <select class="layui-select" name="cate" lay-search>
+                <select class="layui-select" name="cateids" lay-search>
                     <option value="">-- 全部分类 --</option>
-                    {foreach $clist as $cate}{if input('cate','') eq $cate.id}
-                    <option {$cate.sat} selected value="{$cate.id}">{$cate.spl}{$cate.name|default=''}</option>
+                    {foreach $cates as $cate}{if input('cateids','') eq ','.$cate.id.','}
+                    <option selected value=",{$cate.id},">{:join(' > ', $cate.names)}</option>
                     {else}
-                    <option {$cate.sat} value="{$cate.id}">{$cate.spl}{$cate.name|default=''}</option>
+                    <option value=",{$cate.id},">{:join(' > ', $cate.names)}</option>
                     {/if}{/foreach}
                 </select>
             </label>

+ 1 - 1
app/data/view/shop_goods/stock.html

@@ -9,7 +9,7 @@
         <div class="layui-form-item">
             <div class="relative block">
                 <span class="color-green font-w7">库存数据</span>
-                <span class="color-desc margin-left-5">Stock Data</span>
+                <span class="color-desc margin-left-5">Goods Stock Data</span>
                 <table class="layui-table border-0 margin-0" lay-skin="line">
                     <colgroup>
                         <col style="width:auto">

+ 0 - 0
app/data/view/user_level/form.html → app/data/view/user_upgrade/form.html


+ 0 - 0
app/data/view/user_level/index.html → app/data/view/user_upgrade/index.html


+ 4 - 1
vendor/composer/autoload_classmap.php

@@ -242,7 +242,10 @@ return array(
     'app\\data\\service\\NewsService' => $baseDir . '/app/data/service/NewsService.php',
     'app\\data\\service\\OrderService' => $baseDir . '/app/data/service/OrderService.php',
     'app\\data\\service\\PaymentService' => $baseDir . '/app/data/service/PaymentService.php',
-    'app\\data\\service\\PrizeService' => $baseDir . '/app/data/service/PrizeService.php',
+    'app\\data\\service\\RebateCurrentService' => $baseDir . '/app/data/service/RebateCurrentService.php',
+    'app\\data\\service\\RebateMonthService' => $baseDir . '/app/data/service/RebateMonthService.php',
+    'app\\data\\service\\RebateQuarterService' => $baseDir . '/app/data/service/RebateQuarterService.php',
+    'app\\data\\service\\RebateYearService' => $baseDir . '/app/data/service/RebateYearService.php',
     'app\\data\\service\\TruckService' => $baseDir . '/app/data/service/TruckService.php',
     'app\\data\\service\\UserService' => $baseDir . '/app/data/service/UserService.php',
     'app\\data\\service\\payment\\AlipayPaymentService' => $baseDir . '/app/data/service/payment/AlipayPaymentService.php',

+ 4 - 1
vendor/composer/autoload_static.php

@@ -371,7 +371,10 @@ class ComposerStaticInit4f89fd0e0503ccf740f2fa5757825d7b
         'app\\data\\service\\NewsService' => __DIR__ . '/../..' . '/app/data/service/NewsService.php',
         'app\\data\\service\\OrderService' => __DIR__ . '/../..' . '/app/data/service/OrderService.php',
         'app\\data\\service\\PaymentService' => __DIR__ . '/../..' . '/app/data/service/PaymentService.php',
-        'app\\data\\service\\PrizeService' => __DIR__ . '/../..' . '/app/data/service/PrizeService.php',
+        'app\\data\\service\\RebateCurrentService' => __DIR__ . '/../..' . '/app/data/service/RebateCurrentService.php',
+        'app\\data\\service\\RebateMonthService' => __DIR__ . '/../..' . '/app/data/service/RebateMonthService.php',
+        'app\\data\\service\\RebateQuarterService' => __DIR__ . '/../..' . '/app/data/service/RebateQuarterService.php',
+        'app\\data\\service\\RebateYearService' => __DIR__ . '/../..' . '/app/data/service/RebateYearService.php',
         'app\\data\\service\\TruckService' => __DIR__ . '/../..' . '/app/data/service/TruckService.php',
         'app\\data\\service\\UserService' => __DIR__ . '/../..' . '/app/data/service/UserService.php',
         'app\\data\\service\\payment\\AlipayPaymentService' => __DIR__ . '/../..' . '/app/data/service/payment/AlipayPaymentService.php',

+ 1 - 1
vendor/services.php

@@ -1,5 +1,5 @@
 <?php 
-// This file is automatically generated at:2021-03-10 10:48:21
+// This file is automatically generated at:2021-03-11 11:29:29
 declare (strict_types = 1);
 return array (
   0 => 'think\\admin\\Library',