rabin 1 yıl önce
ebeveyn
işleme
17b3dacbd7
44 değiştirilmiş dosya ile 1009 ekleme ve 173 silme
  1. 2 2
      package/manage/index.html
  2. 1 1
      package/manage/static/css/213.89045697.css
  3. 0 1
      package/manage/static/css/954.f9a62230.css
  4. 1 1
      package/manage/static/css/app.d065fbce.css
  5. 1 1
      package/manage/static/css/vab-chunk-c6f52c3a.57a5a92f.css
  6. 1 1
      package/manage/static/css/vab-plugins.e2d56194.css
  7. 1 1
      package/manage/static/js/213.0a2e3ebd.js
  8. 1 1
      package/manage/static/js/592.41e25131.js
  9. 0 5
      package/manage/static/js/654.2f4bd32f.js
  10. 5 0
      package/manage/static/js/954.c66c2e29.js
  11. 1 1
      package/manage/static/js/962.faf0c7f7.js
  12. 0 1
      package/manage/static/js/app.cbce5051.js
  13. 1 1
      package/manage/static/js/vab-chunk-0b9a05e8.3a2acba3.js
  14. 1 1
      package/manage/static/js/vab-chunk-54e012b3.6818ec02.js
  15. 1 1
      package/manage/static/js/vab-chunk-844ca20f.8fd468cb.js
  16. 1 1
      package/manage/static/js/vab-chunk-b3a4eaa1.509e2c01.js
  17. 5 0
      package/manage/static/js/vab-chunk-c6f52c3a.5df8cfda.js
  18. 0 5
      package/manage/static/js/vab-chunk-c6f52c3a.a0d3ed10.js
  19. 1 1
      package/manage/static/js/vab-plugins.91d1ab28.js
  20. 1 1
      src/bao/connect/table/api.php
  21. 2 2
      src/dai/channel/api/Manage.php
  22. 5 0
      src/dai/channel/table/card.php
  23. 1 0
      src/dai/channel/table/info.php
  24. 1 1
      src/dai/channel/table/manage/core.php
  25. 2 2
      src/dai/channel/table/manage/goods.php
  26. 42 0
      src/dai/seller/api/Manage.php
  27. 13 5
      src/dai/seller/api/Order.php
  28. 95 7
      src/dai/seller/lib/Manage.php
  29. 183 105
      src/dai/seller/lib/Order.php
  30. 12 0
      src/dai/seller/table/channel.php
  31. 12 0
      src/dai/seller/table/info.php
  32. 11 7
      src/dai/seller/table/manage/channel.php
  33. 64 1
      src/dai/seller/table/manage/core.php
  34. 1 1
      src/dai/seller/table/manage/goods.php
  35. 80 1
      src/dai/seller/table/manage/info.php
  36. 20 4
      src/dai/seller/table/manage/order_list.php
  37. 19 3
      src/dai/seller/table/manage/order_log_list.php
  38. 5 3
      src/dai/seller/table/manage/order_push.php
  39. 73 0
      src/dai/seller/table/manage/seller_log_list.php
  40. 123 0
      src/dai/seller/table/manage/seller_order_list.php
  41. 121 0
      src/dai/seller/table/manage/seller_order_log_list.php
  42. 56 0
      src/dai/seller/table/manage/seller_order_push.php
  43. 42 3
      src/yuan/goods/api/Manage.php
  44. 1 1
      src/yuan/goods/table/manage/core.php

+ 2 - 2
package/manage/index.html

@@ -1,5 +1,5 @@
-<!doctype html><html lang="zh-cmn-Hans"><head><meta charset="utf-8"/><meta content="IE=edge" http-equiv="X-UA-Compatible"/><meta content="webkit" name="renderer"/><meta content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" name="viewport"/><link href="favicon.ico" rel="icon"/><title>Dever Manage</title><meta content="Dever,PHP,PHP框架,轻量,微服务,组件化,接口,低代码,后台,自定义后台,开发,快速开发,AI,人工智能,文档,轻应用,应用,时空之翼,神秘城" name="keywords"/><meta content="rabin@shemic.com" name="author"/><link href="static/css/loading.css?random=2024-01-11 17:28:26-shemic" rel="stylesheet"/><script>document.write(
+<!doctype html><html lang="zh-cmn-Hans"><head><meta charset="utf-8"/><meta content="IE=edge" http-equiv="X-UA-Compatible"/><meta content="webkit" name="renderer"/><meta content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" name="viewport"/><link href="favicon.ico" rel="icon"/><title>Dever Manage</title><meta content="Dever,PHP,PHP框架,轻量,微服务,组件化,接口,低代码,后台,自定义后台,开发,快速开发,AI,人工智能,文档,轻应用,应用,时空之翼,神秘城" name="keywords"/><meta content="rabin@shemic.com" name="author"/><link href="static/css/loading.css?random=2024-01-18 10:34:42-shemic" rel="stylesheet"/><script>document.write(
         "<script type='text/javascript' src='config.js?" +
           Math.random() +
           "'><\/script>"
-      )</script><script defer="defer" src="static/js/app.66ad3b12.js"></script><script defer="defer" src="static/js/213.54496ab1.js"></script><link href="static/css/app.d065fbce.css" rel="stylesheet"><link href="static/css/213.89045697.css" rel="stylesheet"></head><body><noscript></noscript><div id="app"><div class="first-loading-wrp"><div class="loading-wrp"><span class="dot dot-spin"><i></i> <i></i> <i></i> <i></i></span></div><h1>Dever Manage</h1></div></div></body></html>
+      )</script><script defer="defer" src="static/js/app.cbce5051.js"></script><script defer="defer" src="static/js/213.0a2e3ebd.js"></script><link href="static/css/app.d065fbce.css" rel="stylesheet"><link href="static/css/213.89045697.css" rel="stylesheet"></head><body><noscript></noscript><div id="app"><div class="first-loading-wrp"><div class="loading-wrp"><span class="dot dot-spin"><i></i> <i></i> <i></i> <i></i></span></div><h1>Dever Manage</h1></div></div></body></html>

Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 1
package/manage/static/css/213.89045697.css


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 1
package/manage/static/css/954.f9a62230.css


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 1
package/manage/static/css/app.d065fbce.css


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 1
package/manage/static/css/vab-chunk-c6f52c3a.57a5a92f.css


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 1
package/manage/static/css/vab-plugins.e2d56194.css


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 1
package/manage/static/js/213.0a2e3ebd.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 1
package/manage/static/js/592.41e25131.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 5
package/manage/static/js/654.2f4bd32f.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 5 - 0
package/manage/static/js/954.c66c2e29.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 1
package/manage/static/js/962.faf0c7f7.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 1
package/manage/static/js/app.cbce5051.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 1
package/manage/static/js/vab-chunk-0b9a05e8.3a2acba3.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 1
package/manage/static/js/vab-chunk-54e012b3.6818ec02.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 1
package/manage/static/js/vab-chunk-844ca20f.8fd468cb.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 1
package/manage/static/js/vab-chunk-b3a4eaa1.509e2c01.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 5 - 0
package/manage/static/js/vab-chunk-c6f52c3a.5df8cfda.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 5
package/manage/static/js/vab-chunk-c6f52c3a.a0d3ed10.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 1
package/manage/static/js/vab-plugins.91d1ab28.js


+ 1 - 1
src/bao/connect/table/api.php

@@ -40,7 +40,7 @@ return array
             'name'      => '商品分类',
             'type'      => 'tinyint(1)',
             'default'   => '-1',
-            'value'     => 'Dever::load("goods/manage.getCate")',
+            'value'     => 'Dever::call("goods/manage.getCate")',
         ),
 
         'sign_col' => array

+ 2 - 2
src/dai/channel/api/Manage.php

@@ -6,11 +6,11 @@ class Manage extends Auth
     # 获取渠道下的商品
     public function getGoods($value = false)
     {
+        $result['goods_id']['value'] = '';
+        $result['goods_id']['option'] = array();
         if (!$value) {
-            $result['goods_id']['option'] = array();
             return $result;
         }
-        $result = array();
         $goods = Dever::db('goods', 'channel')->select(array('channel_id' => $value), array('group' => 'goods_id'));
         if ($goods) {
             $option = array();

+ 5 - 0
src/dai/channel/table/card.php

@@ -70,4 +70,9 @@ return array
             ),
         ),
     ),
+    'index' => array
+    (
+        'search' => 'channel_id,goods_id,sku_id',
+        'order_id' => 'order_id',
+    ),
 );

+ 1 - 0
src/dai/channel/table/info.php

@@ -20,6 +20,7 @@ return array
             (
                 1 => '接口',
                 2 => '卡密',
+                11 => '内部',
             ),
         ),
 

+ 1 - 1
src/dai/channel/table/manage/core.php

@@ -8,7 +8,7 @@ return array
             'name' => '角色',
             'icon' => 'contacts-line',
             'sort' => '1',
-            'system' => 'platform',
+            'module' => 'platform',
         ),
         'supplier' => array
         (

+ 2 - 2
src/dai/channel/table/manage/goods.php

@@ -13,8 +13,8 @@ return array
                 'type' => 'cascader',
                 # 仅显示最后一级
                 //'all' => false,
-                'option'    => 'Dever::load("goods/manage.getGoods")',
-                'remote' => 'goods/manage.getSku',
+                'option'    => 'Dever::call("goods/manage.getGoods")',
+                'remote' => 'goods/manage.getAllSku',
                 # 无需默认值
                 'remote_default' => false,
                 'rules' => true,

+ 42 - 0
src/dai/seller/api/Manage.php

@@ -38,4 +38,46 @@ class Manage extends Auth
         }
         return '回调发送成功';
     }
+
+    # 获取商品
+    public function getGoods($value = false)
+    {
+        $result = array();
+        $result['goods']['value'] = '';
+        $result['sku_id']['value'] = '';
+        $result['goods_id']['value'] = '';
+        $result['goods']['option'] = array();
+        $result['sku_id']['option'] = array();
+        if (!$value) {
+            return $result;
+        }
+        $channel = Dever::db('channel', 'seller')->select(array('seller_id' => $value));
+        if ($channel) {
+            $option = $setCate = $setGoods = array();
+            $i = 0;
+            foreach ($channel as $k => $v) {
+                $goods = Dever::db('info', 'goods')->find($v['goods_id']);
+                if ($goods && $goods['status'] == 1) {
+                    if (!isset($setCate[$goods['cate_id']])) {
+                        $cate = Dever::db('cate', 'goods')->find($goods['cate_id']);
+                        if ($cate) {
+                            $setCate[$goods['cate_id']] = $i;
+                            $option[$i] = array
+                            (
+                                'id' => $cate['id'],
+                                'name' => $cate['name'],
+                            );
+                            $i++;
+                        }
+                    }
+                    if (!isset($setGoods[$goods['id']])) {
+                        $option[$setCate[$goods['cate_id']]]['children'][] = $goods;
+                        $setGoods[$goods['id']] = 1;
+                    }
+                }
+            }
+            $result['goods']['option'] = $option;
+        }
+        return $result;
+    }
 }

+ 13 - 5
src/dai/seller/api/Order.php

@@ -58,10 +58,10 @@ class Order
         $result['system_order_num'] = $info['order_num'];
         $result['order_num'] = $info['seller_order_num'];
         $result['order_status'] = $info['status'];
-        $result['order_cash'] = $info['cash'];
-        $result['order_num'] = $info['num'];
-        $result['order_price'] = $info['price'];
-        $result['order_cdate'] = date('Y-m-d H:i:s', $info['cdate']);
+        $result['cash'] = $info['cash'];
+        $result['num'] = $info['num'];
+        $result['price'] = $info['price'];
+        $result['cdate'] = date('Y-m-d H:i:s', $info['cdate']);
         return $result;
     }
 
@@ -101,6 +101,13 @@ class Order
         if (!$sku) {
             Dever::error('商品编码不存在');
         }
+        if ($sku['key'] == -1) {
+            $cash = Dever::input('cash');
+            if (!$cash) {
+                Dever::error('请传入面值');
+            }
+            $sku['value'] = $cash;
+        }
         $goods = Dever::db('info', 'goods')->find($sku['info_id']);
         if (!$goods) {
             Dever::error('商品不存在');
@@ -108,7 +115,8 @@ class Order
         if ($goods['status'] == 2) {
             Dever::error('商品已下架');
         }
-        Dever::load('order', 'seller')->add($this->info, $goods, $sku, $account, $order);
+        $num = 1;
+        Dever::load('order', 'seller')->add($this->info, $goods, $sku, $account, $order, $num);
         return array
         (
             'order_status' => 1,

+ 95 - 7
src/dai/seller/lib/Manage.php

@@ -23,9 +23,21 @@ class Manage extends Auth
             }
             Dever::db('info', 'seller')->update($data['id'], $update);
         }
+        /*
         # 写到redis中
         $info = Dever::db('info', 'seller')->find($data['id']);
         Dever::cache('seller_' . $info['appkey'], $info);
+        */
+    }
+
+    # 为商户生成账号
+    public function createUser($data)
+    {
+        if (isset($data['mobile']) && $data['mobile'] && isset($data['password']) && $data['password']) {
+            $info = Dever::db('info', 'seller')->find($data['id']);
+            Dever::load('group', 'manage')->createUser('seller', $info['id'], $info['name'], $data['mobile'], $data['password']);
+        }
+        return $data;
     }
 
     # 订单手动充值
@@ -65,11 +77,29 @@ class Manage extends Auth
         if ($sku['info_id'] != $goods['id']) {
             Dever::error('商品['.$goods['name'].']下无此规格');
         }
-        $param = explode("\r\n", $data['data']);
+        $cate = Dever::db('cate', 'goods')->find($goods['cate_id']);
+
         $class = Dever::load('order', 'seller');
-        foreach ($param as $k => $v) {
-            $order = Str::order('PAY') . '_' . $k;
-            $class->add($seller, $goods, $sku, $v, $order);
+        if ($cate['key'] == 'km') {
+            $num = $data['data'];
+            # 验证是否有剩余的卡密
+            # 获取渠道
+            $channel = $class->channel($seller['id'], $goods['id'], $sku['id']);
+            if (!$channel) {
+                Dever::error('通道未开启');
+            }
+            $total = Dever::db('card', 'channel')->count(array('channel_id' => $channel['id'], 'goods_id' => $goods['id'], 'sku_id' => $sku['id'], 'status' => 1, 'use_status' => 1));
+            if ($total < $num) {
+                Dever::error('剩余卡密数量不足,当前剩余卡密数量:' . $total . '张');
+            }
+            $order = Str::order('PAY');
+            $class->add($seller, $goods, $sku, $cate['key'] . '_' . $seller['id'], $order, $num);
+        } else {
+            $param = explode("\r\n", $data['data']);
+            foreach ($param as $k => $v) {
+                $order = Str::order('PAY') . '_' . $k;
+                $class->add($seller, $goods, $sku, $v, $order);
+            }
         }
         return $data;
     }
@@ -77,7 +107,7 @@ class Manage extends Auth
     # 修改订单状态
     public function editOrder($id, $data)
     {
-        if ($data['status'] <= 10) {
+        if ($data['status'] < 10) {
             Dever::error('请选择订单状态');
         }
         $newid = array();
@@ -145,8 +175,18 @@ class Manage extends Auth
         return $result;
     }
 
+    # 展示订单商品
+    public function showOrderGoods($cate_id, $goods_id, $sku_id)
+    {
+        $goods = Dever::db('info', 'goods')->find($goods_id);
+
+        $result = $goods['name'];
+        return $result;
+    }
+
+
     # 展示订单金额
-    public function showOrderCash($cate_id, $goods_id, $sku_id, $cash, $price)
+    public function showOrderCash($cate_id, $goods_id, $sku_id, $cash, $price, $num)
     {
         $goods = Dever::db('info', 'goods')->find($goods_id);
 
@@ -246,6 +286,36 @@ class Manage extends Auth
         );
     }
 
+    # 展示账户统计信息
+    public function showLogStat($where)
+    {
+        $db = Dever::db('info', 'seller');
+        $where['id'] = $where['seller_id'];
+        $info = $db->find($where);
+        return array
+        (
+            array
+            (
+                # 一共24
+                'span' => '8',
+                'name' => '余额',
+                'value' => $info['cash'],
+            ),
+            array
+            (
+                'span' => '8',
+                'name' => '授信额度',
+                'value' => $info['credit'],
+            ),
+            array
+            (
+                'span' => '8',
+                'name' => '总充值金额',
+                'value' => $info['p_cash'],
+            ),
+        );
+    }
+
     # 展示订单扩展信息
     public function showOrderExpand($data)
     {
@@ -255,7 +325,7 @@ class Manage extends Auth
             $channel = Dever::db('info', 'channel')->find($data['channel_id']);
         }
         $value = $this->showOrderStatus($data['status']);
-        $goods = $this->showOrderCash($data['cate_id'], $data['goods_id'], $data['sku_id'], $data['cash'], $data['price']);
+        $goods = $this->showOrderCash($data['cate_id'], $data['goods_id'], $data['sku_id'], $data['cash'], $data['price'], $data['num']);
         $result['type'] = 'desc';
         $result['content'][] = array
         (
@@ -269,6 +339,7 @@ class Manage extends Auth
                 array('商户名称', $seller['name']),
                 array('商户订单号', $data['seller_order_num']),
                 array('商品', $goods),
+                array('数量', $data['num']),
                 array('商户请求参数', $data['seller_request']),
                 array('请求时间', date('Y-m-d H:i', $data['cdate'])),
             ), 
@@ -340,4 +411,21 @@ class Manage extends Auth
         );
         return $result;
     }
+
+    # 导出卡密
+    public function outKm($data)
+    {
+        $result = array();
+        $result['head'] = array('订单id', '订单号', '面值', '卡号', '密码');
+        $result['body'] = array();
+        foreach ($data['body'] as $k => $v) {
+            $card = Dever::db('card', 'channel')->select(array('order_id' => $v['id']));
+            if ($card) {
+                foreach ($card as $k1 => $v1) {
+                    $result['body'][] = array($v['id'], $v['order_num'], $v['cash'], $v1['number'], $v1['pwd']);
+                }
+            }
+        }
+        return $result;
+    }
 }

+ 183 - 105
src/dai/seller/lib/Order.php

@@ -4,60 +4,68 @@ use Dever\Helper\Str;
 class Order
 {
     # 新增订单
-    public function add($info, $goods, $sku, $account, $order)
+    public function add($info, $goods, $sku, $account, $order, $num = 1)
     {
+        $data = Dever::store()->transaction(array($this, 'addAct'), array($info, $goods, $sku, $account, $order, $num), '下单失败');
+        if ($data) {
+            //\Dever\Helper\Redis::push('submit_' . $data['seller_id'], $data['id']);
+            \Dever\Helper\Redis::push('submit_' . DEVER_PROJECT, $data['id']);
+            Dever::load('info', 'seller')->log($data['seller_id'], $data['id'], $data['price'], 3);
+        }
+        return $data;
+    }
+    public function addAct($info, $goods, $sku, $account, $order, $num = 1)
+    {
+        # 验证规则
         $cate = Dever::db('cate', 'goods')->find($goods['cate_id']);
         if ($cate && $cate['rule'] && !preg_match($cate['rule'], $account)) {
             Dever::error($account . '不符合规则');
         }
-
-        # 查询折扣
-        $seller_goods = Dever::db('goods', 'seller')->find(array('seller_id' => $info['id'], 'goods_id' => $sku['info_id'], 'sku_id' => $sku['id']));
-        if ($seller_goods && $seller_goods['discount'] > 0) {
-            $info['discount'] = $seller_goods['discount'];
-        }
-        if (!$info['discount']) {
-            $info['discount'] = 1;
-        }
-        $cash = round($sku['value'] * $info['discount'], 2);
-
-        # 查询余额是否充足
-        $info['yue'] = $info['credit'] + $info['cash'];
-        if ($info['yue'] < $cash) {
-            Dever::error('余额不足');
-        }
-        $state = Dever::load('info', 'seller')->dec($info['id'], $cash);
-
         # 验证订单号
         $check = Dever::db('order', 'seller')->find(array('seller_id' => $info['id'], 'seller_order_num' => $order));
         if ($check) {
             Dever::error('订单重复');
         }
 
+        $cash = $this->cash($info['id'], $sku['info_id'], $sku['id'], $sku['value'], $num);
+
         # 开始下单
         $data = array();
         $data['account'] = $account;
         $data['cate_id'] = $goods['cate_id'];
         $data['goods_id'] = $sku['info_id'];
         $data['sku_id'] = $sku['id'];
-        $data['num'] = 1;
+        $data['num'] = $num;
         $data['cash'] = $sku['value'];
         $data['price'] = $cash;
         $data['seller_id'] = $info['id'];
         $data['seller_order_num'] = $order;
         $data['seller_request'] = Dever::json_encode(Dever::input());
 
-        $order_id = Dever::db('order', 'seller')->insert($data);
-        if (!$order_id) {
+        $data['id'] = Dever::db('order', 'seller')->insert($data);
+        if (!$data['id']) {
             Dever::error('下单失败');
         }
-        //\Dever\Helper\Redis::push('submit_' . $data['seller_id'], $order_id);
-        $state = \Dever\Helper\Redis::push('submit_' . DEVER_PROJECT, $order_id);
-        Dever::load('info', 'seller')->log($info['id'], $order_id, $data['price'], 3);
-        return $order_id;
+        return $data;
     }
 
     public function handle($info, $selected = array())
+    {
+        $data = Dever::store()->transaction(array($this, 'handleAct'), array($info, $selected), '下单失败');
+        $order = Dever::db('order', 'seller')->find($info['id']);
+        if ($info['status'] < 10 && $order['status'] >= 10) {
+            if ($order['status'] == 11) {
+                # 失败,余额加回来
+                Dever::load('info', 'seller')->inc($order['seller_id'], $order['price']);
+                Dever::load('info', 'seller')->log($order['seller_id'], $order['id'], $order['price'], 4);
+            }
+            # 将记录写到influx中
+            Dever::db('order_log', 'seller')->insert($order);
+        }
+        return $data;
+    }
+
+    public function handleAct($info, $selected = array())
     {
         if ($info['status'] >= 10) {
             return;
@@ -67,75 +75,74 @@ class Order
             $info['order_num'] = $update['order_num'] = $this->createOrder();
         }
         Dever::db('order', 'seller')->update($info['id'], $update);
-        # 查找渠道
-        $channel_list = Dever::db('channel', 'seller')->select(array('seller_id' => $info['seller_id'], 'goods_id' => $info['goods_id']));
-        if (!$channel_list) {
-            return $this->notify($info, '通道未开启', $update);
-        }
-        $channel = $channel_goods = array();
-        foreach ($channel_list as $k => $v) {
-            if ($selected && isset($selected[$v['channel_id']])) {
-                continue;
-            }
-            if (!$v['sku_id']) {
-                $channel_goods = Dever::db('goods', 'channel')->find(array('channel_id' => $v['channel_id'], 'goods_id' => $info['goods_id'], 'sku_id' => $info['sku_id']));
-                if ($channel_goods) {
-                    $channel = $v['channel_id'];
-                    break;
-                }
-            } else {
-                $sku_id = explode(',', $v['sku_id']);
-                if (in_array($info['sku_id'], $sku_id)) {
-                    $channel = $v['channel_id'];
-                    break;
-                }
-            }
-        }
-        if (!$channel) {
-            return $this->notify($info, '通道未开启', $update);
-        }
 
-        $channel = Dever::db('info', 'channel')->find($channel);
+        $channel = $this->channel($info['seller_id'], $info['goods_id'], $info['sku_id']);
         if (!$channel) {
             return $this->notify($info, '通道未开启', $update);
         }
-        if ($channel['status'] == 2) {
-            return $this->notify($info, '通道未开启', $update);
+        $result = array();
+        if ($channel['type'] == 1) {
+            # 通信
+            # 向渠道发起请求 下单
+            $param['order_id'] = $info['id'];
+            $param['order_num'] = $info['order_num'];
+            $param['account'] = $info['account'];
+            $param['cash'] = $info['cash'];
+            $param['num'] = $info['num'];
+            if ($info['other']) {
+                $info['other'] = Dever::json_decode($info['other']);
+                $param = array_merge($info['other'], $param);
+            }
+            if (isset($channel['goods']['code'])) {
+                $param['code'] = $channel['goods']['code'];
+            }
+            $result = Dever::load('func/api', 'connect')->run(1, $info['cate_id'], $channel, $param);
+        } elseif ($channel['type'] == 2) {
+            # 获取卡密并占用
+            $param['channel_id'] = $channel['id'];
+            $param['goods_id'] = $info['goods_id'];
+            $param['sku_id'] = $info['sku_id'];
+            $param['status'] = 1;
+            $param['use_status'] = 1;
+            $card = Dever::db('card', 'channel')->select($param, array('limit' => '0, ' . $info['num']), true);
+            $total = count($card);
+            if ($total < $info['num']) {
+                return $this->notify($info, '卡密剩余数量不足', $update);
+            }
+            foreach ($card as $k => $v) {
+                Dever::db('card', 'channel')->update($v['id'], array('use_status' => 2, 'order_id' => $info['id']));
+            }
+            $result['status'] = 1;
+        } elseif ($channel['type'] == 11) {
+            $result['status'] = 1;
         }
-
-        # 向渠道发起请求 下单
-        $param['order_id'] = $info['id'];
-        $param['order_num'] = $info['order_num'];
-        $param['account'] = $info['account'];
-        $param['cash'] = $info['cash'];
-        if ($info['other']) {
-            $info['other'] = Dever::json_decode($info['other']);
-            $param = array_merge($info['other'], $param);
-        }
-        if (isset($channel_goods['code'])) {
-            $param['code'] = $channel_goods['code'];
-        }
-        $result = Dever::load('func/api', 'connect')->run(1, $info['cate_id'], $channel, $param);
+        
         $update = array();
-
         $update['channel_id'] = $channel['id'];
         $update['channel_order_date'] = time();
-        $update['channel_request'] = Dever::json_encode($result['request']);
-        $update['channel_response'] = Dever::json_encode($result['response']);
-        if (isset($channel_goods['id'])) {
-            $update['channel_goods_id'] = $channel_goods['id'];
+        if (isset($result['request'])) {
+            $update['channel_request'] = Dever::json_encode($result['request']);
+        }
+        if (isset($result['response'])) {
+            $update['channel_response'] = Dever::json_encode($result['response']);
+        }
+        if (isset($channel['goods']['id'])) {
+            $update['channel_goods_id'] = $channel['goods']['id'];
         }
         $update['channel_goods_discount'] = $channel['discount'];
-        if (isset($channel_goods['discount']) && $channel_goods['discount']) {
-            $update['channel_goods_discount'] = $channel_goods['discount'];
+        if (isset($channel['goods']['discount']) && $channel['goods']['discount']) {
+            $update['channel_goods_discount'] = $channel['goods']['discount'];
         }
         if (!$update['channel_goods_discount']) {
             $update['channel_goods_discount'] = 1;
         }
-        $update['buy_price'] = round($info['cash'] * $update['channel_goods_discount'], 2);
+        $update['buy_price'] = round($info['cash'] * $update['channel_goods_discount'], 2) * $info['num'];
         if ($result['status'] == 1) {
             # 下单成功
             Dever::db('order', 'seller')->update($info['id'], $update);
+            if ($channel['type'] == 2) {
+                return $this->notify($info, 'ok', $update);
+            }
             return 'ok';
         } else {
             # 下单失败
@@ -158,24 +165,30 @@ class Order
         } else {
             $notify = $seller['notify'];
         }
-        if ($notify && $info['seller_callback'] != 'ok' && $info['seller_callback_num'] <= $total) {
-            $param = array();
-            $param['appkey'] = $seller['appkey'];
-            $param['order_num'] = $info['seller_order_num'];
-            $param['system_order_num'] = $info['order_num'];
-            $param['order_status'] = $status;
-            $param['order_cash'] = $info['cash'];
-            $param['official_order_num'] = $param['official_msg'] = '';
-            if (isset($update['official_order_num'])) {
-                $param['official_order_num'] = $update['official_order_num'];
-            }
-            if (isset($update['official_msg'])) {
-                $param['official_msg'] = $update['official_msg'];
+        if ($notify) {
+            if ($info['seller_callback'] != 'ok' && $info['seller_callback_num'] <= $total) {
+                $param = array();
+                $param['appkey'] = $seller['appkey'];
+                $param['order_num'] = $info['seller_order_num'];
+                $param['system_order_num'] = $info['order_num'];
+                $param['order_status'] = $status;
+                $param['order_cash'] = $info['cash'];
+                $param['official_order_num'] = $param['official_msg'] = '';
+                if (isset($update['official_order_num'])) {
+                    $param['official_order_num'] = $update['official_order_num'];
+                }
+                if (isset($update['official_msg'])) {
+                    $param['official_msg'] = $update['official_msg'];
+                }
+                $param = \Dever\Helper\Secure::get($param, $seller['appsecret']);
+                $response = Dever::curl($notify, $param, 'post')->result();
+                # ok是成功
+                $update['seller_callback'] = $response;
+                $update['seller_callback_date'] = time();
+                $update['seller_callback_num'] = $info['seller_callback_num'] + 1;
             }
-            $param = \Dever\Helper\Secure::get($param, $seller['appsecret']);
-            $response = Dever::curl($notify, $param, 'post')->result();
-            # ok是成功
-            $update['seller_callback'] = $response;
+        } else {
+            $update['seller_callback'] = 'ok';
             $update['seller_callback_date'] = time();
             $update['seller_callback_num'] = $info['seller_callback_num'] + 1;
         }
@@ -185,16 +198,6 @@ class Order
             $update['status'] = $status;
             $update['finish'] = 1;
             $update['finish_date'] = time();
-            if ($status == 11) {
-                # 失败,余额加回来
-                Dever::load('info', 'seller')->inc($info['seller_id'], $info['price']);
-                Dever::load('info', 'seller')->log($info['seller_id'], $info['id'], $info['price'], 4);
-            } elseif ($status == 10) {
-                # 成功
-            }
-            # 将记录写到influx中
-            $info = array_merge($info, $update);
-            Dever::db('order_log', 'seller')->insert($info);
         }
         if (!$info['order_num']) {
             $update['order_num'] = $this->createOrder();
@@ -203,6 +206,81 @@ class Order
         return $msg;
     }
 
+    # 扣费
+    public function cash($seller_id, $goods_id, $sku_id, $value, $num = 1)
+    {
+        # 查询折扣 扣费
+        $seller_goods = Dever::db('goods', 'seller')->find(array('seller_id' => $seller_id, 'goods_id' => $goods_id, 'sku_id' => $sku_id));
+
+        $info = Dever::db('info', 'seller')->find($seller_id);
+        if ($seller_goods && $seller_goods['discount'] > 0) {
+            $info['discount'] = $seller_goods['discount'];
+        }
+        if (!$info['discount']) {
+            $info['discount'] = 1;
+        }
+        $cash = round($value * $info['discount'], 2) * $num;
+
+        # 查询余额是否充足
+        $info['yue'] = $info['credit'] + $info['cash'];
+        if ($info['yue'] < $cash) {
+            Dever::error('余额不足');
+        }
+        $state = Dever::load('info', 'seller')->dec($info['id'], $cash);
+        if (!$state) {
+            Dever::error('余额不足');
+        }
+        return $cash;
+    }
+
+    # 获取渠道
+    public function channel($seller_id, $goods_id, $sku_id, $selected = array())
+    {
+        # 查找渠道
+        $channel_list = Dever::db('channel', 'seller')->select(array('seller_id' => $seller_id, 'goods_id' => $goods_id, 'status' => 1));
+        if (!$channel_list) {
+            return false;
+        }
+        $channel = $goods = array();
+        foreach ($channel_list as $k => $v) {
+            if ($selected && isset($selected[$v['channel_id']])) {
+                continue;
+            }
+            if (!$v['sku_id']) {
+                $goods = Dever::db('goods', 'channel')->find(array('channel_id' => $v['channel_id'], 'goods_id' => $goods_id, 'sku_id' => $sku_id));
+                if ($goods) {
+                    $channel = $v['channel_id'];
+                    break;
+                } else {
+                    $goods = Dever::db('goods', 'channel')->find(array('channel_id' => $v['channel_id'], 'goods_id' => $goods_id, 'sku_id' => -1));
+                    if ($goods) {
+                        $channel = $v['channel_id'];
+                        break;
+                    }
+                }
+            } else {
+                $all_sku_id = explode(',', $v['sku_id']);
+                if (in_array($sku_id, $all_sku_id)) {
+                    $channel = $v['channel_id'];
+                    break;
+                }
+            }
+        }
+        if (!$channel) {
+            return false;
+        }
+
+        $channel = Dever::db('info', 'channel')->find($channel);
+        if (!$channel) {
+            return false;
+        }
+        if ($channel['status'] == 2) {
+            return false;
+        }
+        $channel['goods'] = $goods;
+        return $channel;
+    }
+
     public function createOrder()
     {
         $where['order_num'] = Str::order('C');

+ 12 - 0
src/dai/seller/table/channel.php

@@ -35,5 +35,17 @@ return array
             'name'      => 'SKUid',
             'type'      => 'varchar(2000)',
         ),
+
+        'status' => array
+        (
+            'name'      => '状态',
+            'type'      => 'tinyint(1)',
+            'default'   => 1,
+            'value'     => array
+            (
+                1 => '开启',
+                2 => '禁用',
+            ),
+        ),
     ),
 );

+ 12 - 0
src/dai/seller/table/info.php

@@ -12,6 +12,18 @@ return array
             'fields'    => true,
         ),
 
+        'mobile' => array
+        (
+            'name'      => '登录手机号',
+            'type'      => 'varchar(11)',
+        ),
+        
+        'password' => array
+        (
+            'name'      => '登录密码',
+            'type'      => 'varchar(64)',
+        ),
+
         'discount' => array
         (
             'name'      => '默认折扣',

+ 11 - 7
src/dai/seller/table/manage/channel.php

@@ -9,7 +9,7 @@ return array
             (
                 'name' => '渠道',
                 'type' => 'select',
-                'option'    => 'Dever::load("channel/manage.getInfo")',
+                'option'    => 'Dever::call("channel/manage.getInfo")',
                 'remote' => 'channel/manage.getGoods',
                 # 无需默认值
                 'remote_default' => false,
@@ -18,12 +18,7 @@ return array
             (
                 'name' => '商品',
                 'type' => 'select',
-                'remote' => 'goods/manage.getSku',
-            ),
-            'sort' => array
-            (
-                'type' => 'text',
-                'rules' => true,
+                'remote' => 'goods/manage.getMulSku',
             ),
             'sku_id' => array
             (
@@ -32,6 +27,15 @@ return array
                 'clearable' => true,
                 'multiple' => true,
             ),
+            'sort' => array
+            (
+                'type' => 'text',
+                'rules' => true,
+            ),
+            'status' => array
+            (
+                'type' => 'radio',
+            ),
         ),
     ),
 );

+ 64 - 1
src/dai/seller/table/manage/core.php

@@ -1,8 +1,71 @@
 <?php
 return array
 (
+    # 系统模块定义 这里定义商户管理系统
+    'module' => array
+    (
+        'seller' => array
+        (
+            'name' => '商户',
+            'sort' => '1',
+            'system' => 'group',
+            'data_table' => 'seller/info',
+        ),
+    ),
+
     'menu' => array
     (
+        'seller_data' => array
+        (
+            'name' => '数据',
+            'icon' => 'database-line',
+            'sort' => '1',
+            'module' => 'seller',
+        ),
+        'seller_order' => array
+        (
+            'parent' => 'seller_data',
+            'name' => '订单管理',
+            'icon' => 'order-play-line',
+            'sort' => '1',
+        ),
+        'seller_order_list' => array
+        (
+            'parent'    => 'seller_order',
+            'name'      => '今日订单',
+            'icon'      => 'album-line',
+            'sort'      => '1',
+        ),
+        'seller_order_log_list' => array
+        (
+            'parent'    => 'seller_order',
+            'name'      => '已完成订单',
+            'icon'      => 'bank-card-line',
+            'sort'      => '2',
+        ),
+        'seller_order_push' => array
+        (
+            'parent'    => 'seller_order',
+            'name'      => '手动充值',
+            'icon'      => 'bank-card-line',
+            'sort'      => '3',
+            'show'      => 3,
+        ),
+        'seller_log' => array
+        (
+            'parent'    => 'seller_data',
+            'name'      => '账户管理',
+            'icon'      => 'mickey-line',
+            'sort'      => '2',
+        ),
+        'seller_log_list' => array
+        (
+            'parent'    => 'seller_log',
+            'name'      => '钱包流水',
+            'icon'      => 'article-line',
+            'sort'      => '1',
+        ),
+
         'dealer' => array
         (
             'parent' => 'dai',
@@ -30,7 +93,7 @@ return array
             'name' => '数据',
             'icon' => 'database-line',
             'sort' => '1',
-            'system' => 'platform',
+            'module' => 'platform',
         ),
         'order' => array
         (

+ 1 - 1
src/dai/seller/table/manage/goods.php

@@ -11,7 +11,7 @@ return array
                 'type' => 'cascader',
                 # 仅显示最后一级
                 //'all' => false,
-                'option'    => 'Dever::load("goods/manage.getGoods")',
+                'option'    => 'Dever::call("goods/manage.getGoods")',
                 'remote' => 'goods/manage.getSku',
                 # 无需默认值
                 'remote_default' => false,

+ 80 - 1
src/dai/seller/table/manage/info.php

@@ -25,6 +25,7 @@ return array
         'data_button' => array
         (
             '编辑' => array('fastedit', 'name,credit,discount,notify'),
+            '账户设置' => array('fastedit', 'mobile,password', 'Place'),
             '渠道设置' => array('edit', 'seller/channel', 'Operation'),
             '折扣设置' => array('edit', 'seller/goods', 'Odometer'),
             '资金流水' => array('route', array
@@ -35,7 +36,7 @@ return array
                     'set' => array('seller_id' => 'id', 'menu' => 'dealer/info', 'parent' => 'dealer/log'),
                 ),
             ), 'ChatLineSquare'),
-            '查看账户' => array('fastedit', 'doc,host,appkey,appsecret', 'View'),
+            '查看账户' => array('fastedit', 'doc,host,appkey,appsecret,address,show_mobile,show_password', 'View'),
         ),
         'button' => array
         (
@@ -64,7 +65,84 @@ return array
             ),
             'appkey' => 'show',
             'appsecret' => 'show',
+            'address' => array
+            (
+                'name' => '后台地址',
+                'type' => 'show',
+                'default' => Dever::host() . 'package/manage/#/login?system=group&number=default',
+            ),
+            'show_mobile' => array
+            (
+                'name' => '登录账号',
+                'type' => 'show',
+                'default' => '"{mobile}"',
+            ),
+            'show_password' => array
+            (
+                'name' => '登录密码',
+                'type' => 'show',
+                'default' => '"{password}"',
+            ),
             'name',
+            'mobile' => array
+            (
+                'name'      => '手机号',
+                'type'      => 'text',
+                'disable'   => false,//是否禁用
+                'placeholder' => '',//提示语
+                # 校验规则,如rules => true,是必填, 无rules或者rules=false,就是选填
+                # 参考:https://github.com/yiminghe/async-validator
+                'rules'     => array
+                (
+                    # 规则1
+                    array
+                    (
+                        # 必填
+                        'required' => true,
+                        # 输入后触发
+                        'trigger' => 'blur',
+                        # 提示信息
+                        'message' => '请输入手机号',
+                    ),
+                    # 规则2
+                    array
+                    (
+                        # 最小字符
+                        //'min' => 3,
+                        # 最大字符
+                        //'max' => 5,
+                        # 长度
+                        'len' => 11,
+                        # 正则
+                        'pattern' => Dever::rule('mobile', ''),
+                        'trigger' => 'blur',
+                        # 提示信息
+                        'message' => '手机号错误',
+                        # 验证类型 date,array,number,boolean,integer,float,url,email,enum,string
+                        'type' => 'string',
+                    ),
+                ),
+            ),
+            'password' => array
+            (
+                'type' => 'password',
+                'rules'     => array
+                (
+                    array
+                    (
+                        'required' => true,
+                        'trigger' => 'blur',
+                        'message' => '请输入密码',
+                    ),
+                    array
+                    (
+                        'min' => 6,
+                        'max' => 18,
+                        'trigger' => 'blur',
+                        'message' => '密码长度不能超过18或者少于6个字符',
+                    ),
+                ),
+            ),
             'credit',
             'discount' => array
             (
@@ -83,6 +161,7 @@ return array
                 'where'  => array('seller_id' => 'id'),
             ),
         ),
+        'start' => 'seller/manage.createUser',
         'end' => 'seller/manage.createAppKey',
     ),
 );

+ 20 - 4
src/dai/seller/table/manage/order_list.php

@@ -13,17 +13,33 @@ return array
             'order_num' => array
             (
                 //'fixed' => true,
-                'width' => '230',
+                'width' => '210',
                 'show' => '"{order_num}" ? "{order_num}" : "-"',
             ),
             'account',
+            /*
             'cash' => array
             (
                 'width' => '230',
                 'name' => '商品 / 面值 / 实付',
                 'show' => 'Dever::load("manage", "seller")->showOrderCash("{cate_id}", "{goods_id}", "{sku_id}", "{cash}", "{price}")',
             ),
-            //'num',
+            */
+            'goods_id' => array
+            (
+                'name' => '商品',
+                'show' => 'Dever::load("manage", "seller")->showOrderGoods("{cate_id}", "{goods_id}", "{sku_id}")',
+            ),
+            'cash' => array
+            (
+                'width' => '60',
+                'name' => '面值',
+            ),
+            'num' => array
+            (
+                'width' => '60',
+                'name' => '数量',
+            ),
             //'price',
             //'channel_id',
             'status' => array
@@ -63,7 +79,7 @@ return array
         'export' => array
         (
             'out' => '导出',
-            //'manage/common.out' => '自定义导出',
+            'seller/manage.outKm' => '导出卡密',
         ),
         'search' => array
         (
@@ -85,7 +101,7 @@ return array
                 'name' => '商品',
                 'placeholder' => '请选择商品',
                 'type' => 'cascader',
-                'option'    => 'Dever::load("goods/manage.getGoodsSku")',
+                'option'    => 'Dever::call("goods/manage.getGoodsSku")',
                 'search' => function($key, $type, $value) {
                     $value = end($value);
                     return $value;

+ 19 - 3
src/dai/seller/table/manage/order_log_list.php

@@ -17,13 +17,29 @@ return array
                 'show' => '"{order_num}" ? "{order_num}" : "-"',
             ),
             'account',
+            /*
             'cash' => array
             (
                 'width' => '230',
                 'name' => '商品 / 面值 / 实付',
                 'show' => 'Dever::load("manage", "seller")->showOrderCash("{cate_id}", "{goods_id}", "{sku_id}", "{cash}", "{price}")',
             ),
-            //'num',
+            */
+            'goods_id' => array
+            (
+                'name' => '商品',
+                'show' => 'Dever::load("manage", "seller")->showOrderGoods("{cate_id}", "{goods_id}", "{sku_id}")',
+            ),
+            'cash' => array
+            (
+                'width' => '60',
+                'name' => '面值',
+            ),
+            'num' => array
+            (
+                'width' => '60',
+                'name' => '数量',
+            ),
             //'price',
             //'channel_id',
             'status' => array
@@ -57,7 +73,7 @@ return array
         'export' => array
         (
             'out' => '导出',
-            //'manage/common.out' => '自定义导出',
+            'seller/manage.outKm' => '导出卡密',
         ),
         'search' => array
         (
@@ -79,7 +95,7 @@ return array
                 'name' => '商品',
                 'placeholder' => '请选择商品',
                 'type' => 'cascader',
-                'option'    => 'Dever::load("goods/manage.getGoodsSku")',
+                'option'    => 'Dever::call("goods/manage.getGoodsSku")',
                 'search' => function($key, $type, $value) {
                     $value = end($value);
                     return $value;

+ 5 - 3
src/dai/seller/table/manage/order_push.php

@@ -9,6 +9,8 @@ return array
             'seller_id' => array
             (
                 'rules' => true,
+                'remote' => 'seller/manage.getGoods',
+                'remote_default' => false,
             ),
             'goods' => array
             (
@@ -16,7 +18,7 @@ return array
                 'type' => 'cascader',
                 # 仅显示最后一级
                 //'all' => false,
-                'option'    => 'Dever::load("goods/manage.getGoods")',
+                //'option'    => 'Dever::call("goods/manage.getGoods")',
                 'remote' => 'goods/manage.getSku',
                 # 无需默认值
                 'remote_default' => false,
@@ -37,8 +39,8 @@ return array
             'data' => array
             (
                 'type' => 'textarea',
-                'rows' => 10,
-                'placeholder' => '直接输要充值的账号,如手机号、卡号等,多个用换行隔开',
+                'rows' => 5,
+                'placeholder' => '直接输要充值的账号,如手机号、卡号等,多个用换行隔开,卡密这里填写数量即可',
                 'rules' => true,
             ),
         ),

+ 73 - 0
src/dai/seller/table/manage/seller_log_list.php

@@ -0,0 +1,73 @@
+<?php
+$extend = Dever::load('common', 'manage')->extend();
+$seller_id = $extend['data_id'];
+return array
+(
+    'source' => 'seller/log',
+    'list' => array
+    (
+        'where' => array('seller_id' => $seller_id),
+        'stat' => 'seller/manage.showLogStat',
+        'field'      => array
+        (
+            'type' => array
+            (
+                'width' => '120',
+            ),
+            'cash' => array
+            (
+                'width' => '150',
+            ),
+            //'yue',
+            'desc' => array
+            (
+                'name' => '操作备注/订单号',
+                'show' => '"{desc}" ? "{desc}" : Dever::load("manage", "seller")->showOrder({order_id})',
+            ),
+            'cdate' => array
+            (
+                'name' => '时间',
+                'width' => '150',
+            ),
+        ),
+        'data_button' => array
+        (
+            
+        ),
+        'button' => array
+        (
+            //'账户操作' => array('fastadd', array('seller_id' => $seller_id)),
+        ),
+        'export' => array
+        (
+            //'out' => '导出',
+            //'manage/common.out' => '自定义导出',
+        ),
+        'search' => array
+        (
+            'type',
+            //'desc',
+            'order_id' => array
+            (
+                'name' => '系统订单号',
+                'search' => array
+                (
+                    'table' => 'seller/order',
+                    'where' => array('order_num' => '{value}'),
+                    'set' => array(),
+                    'field' => 'id',
+                ),
+            ),
+            'cdate' => array
+            (
+                'name' => '时间',
+                'type' => 'date',
+                'date_type' => 'datetimerange',
+                'value_format' => 'YYYY-MM-DD HH:mm:ss',
+                'start_placeholder' => '开始时间',
+                'end_placeholder' => '结束时间',
+                'range_separator' => '至',
+            ),
+        ),
+    ),
+);

+ 123 - 0
src/dai/seller/table/manage/seller_order_list.php

@@ -0,0 +1,123 @@
+<?php
+$extend = Dever::load('common', 'manage')->extend();
+$seller_id = $extend['data_id'];
+return array
+(
+    'source' => 'seller/order',
+    'list' => array
+    (
+        'where' => array('seller_id' => $seller_id),
+        //'expand' => 'seller/manage.showOrderExpand',
+        //'stat' => 'seller/manage.showOrderStat',
+        'field'      => array
+        (
+            'seller_order_num',
+            'order_num' => array
+            (
+                //'fixed' => true,
+                'width' => '230',
+                'show' => '"{order_num}" ? "{order_num}" : "-"',
+            ),
+            'account',
+            /*
+            'cash' => array
+            (
+                'width' => '230',
+                'name' => '商品 / 面值 / 实付',
+                'show' => 'Dever::load("manage", "seller")->showOrderCash("{cate_id}", "{goods_id}", "{sku_id}", "{cash}", "{price}")',
+            ),
+            */
+            'goods_id' => array
+            (
+                'name' => '商品',
+                'show' => 'Dever::load("manage", "seller")->showOrderGoods("{cate_id}", "{goods_id}", "{sku_id}")',
+            ),
+            'cash' => array
+            (
+                'width' => '60',
+                'name' => '面值',
+            ),
+            'num' => array
+            (
+                'width' => '60',
+                'name' => '数量',
+            ),
+            //'price',
+            //'channel_id',
+            'status' => array
+            (
+                'width' => '100',
+                'type' => 'tag',
+                'style' => 'info',
+                'show' => 'Dever::load("manage", "seller")->showOrderStatus("{status}")',
+            ),
+            'cdate' => array
+            (
+                'name' => '下单时间',
+            ),
+            'finish_date' => array
+            (
+                'name' => '完成时间',
+                'type' => 'show',
+                'show' => '{finish_date} > 0 ? date("Y-m-d H:i", {finish_date}) : "-"',
+            ),
+        ),
+        'data_button' => array
+        (
+            
+        ),
+        'button' => array
+        (
+            '手动下单' => array('fastadd', array
+            (
+                'path' => 'seller_order/seller_order_push',
+                'param' => array(),
+            )),
+        ),
+        'export' => array
+        (
+            'seller/manage.outKm' => '导出卡密',
+            //'out' => '导出',
+            //'manage/common.out' => '自定义导出',
+        ),
+        'search' => array
+        (
+            'status',
+            'order_num',
+            'seller_order_num',
+            //'channel_order_num',
+            'account',
+            'sku_id' => array
+            (
+                'name' => '商品',
+                'placeholder' => '请选择商品',
+                'type' => 'cascader',
+                'option'    => 'Dever::call("goods/manage.getGoodsSku")',
+                'search' => function($key, $type, $value) {
+                    $value = end($value);
+                    return $value;
+                }
+            ),
+            'finish_date' => array
+            (
+                'name' => '完成时间',
+                'type' => 'date',
+                'date_type' => 'datetimerange',
+                'value_format' => 'YYYY-MM-DD HH:mm:ss',
+                'start_placeholder' => '完成时间',
+                'end_placeholder' => '完成时间',
+                'range_separator' => '至',
+            ),
+            'cdate' => array
+            (
+                'name' => '下单时间',
+                'type' => 'date',
+                'date_type' => 'datetimerange',
+                'value_format' => 'YYYY-MM-DD HH:mm:ss',
+                'start_placeholder' => '下单时间',
+                'end_placeholder' => '下单时间',
+                'range_separator' => '至',
+            ),
+        ),
+    ),
+);

+ 121 - 0
src/dai/seller/table/manage/seller_order_log_list.php

@@ -0,0 +1,121 @@
+<?php
+$extend = Dever::load('common', 'manage')->extend();
+$seller_id = $extend['data_id'];
+return array
+(
+    'source' => 'seller/order_log',
+    'list' => array
+    (
+        'where' => array('seller_id' => $seller_id),
+        //'expand' => 'seller/manage.showOrderExpand',
+        //'stat' => 'seller/manage.showOrderStat',
+        'field'      => array
+        (
+            'seller_order_num',
+            'order_num' => array
+            (
+                //'fixed' => true,
+                'width' => '230',
+                'show' => '"{order_num}" ? "{order_num}" : "-"',
+            ),
+            'account',
+            /*
+            'cash' => array
+            (
+                'width' => '230',
+                'name' => '商品 / 面值 / 实付',
+                'show' => 'Dever::load("manage", "seller")->showOrderCash("{cate_id}", "{goods_id}", "{sku_id}", "{cash}", "{price}")',
+            ),
+            */
+            'goods_id' => array
+            (
+                'name' => '商品',
+                'show' => 'Dever::load("manage", "seller")->showOrderGoods("{cate_id}", "{goods_id}", "{sku_id}")',
+            ),
+            'cash' => array
+            (
+                'width' => '60',
+                'name' => '面值',
+            ),
+            'num' => array
+            (
+                'width' => '60',
+                'name' => '数量',
+            ),
+            //'price',
+            //'channel_id',
+            'status' => array
+            (
+                'width' => '100',
+                'type' => 'tag',
+                # 会alert弹出
+                //'remote' => 'seller/manage.showOrderLogExpand',
+                'style' => 'info',
+                'show' => 'Dever::load("manage", "seller")->showOrderStatus("{status}")',
+            ),
+            'cdate' => array
+            (
+                'name' => '下单时间',
+            ),
+            'finish_date' => array
+            (
+                'name' => '完成时间',
+                'type' => 'show',
+                'show' => '{finish_date} > 0 ? date("Y-m-d H:i", {finish_date}) : "-"',
+            ),
+        ),
+        'data_button' => array
+        (
+            
+        ),
+        'button' => array
+        (
+            
+        ),
+        'export' => array
+        (
+            'seller/manage.outKm' => '导出卡密',
+            //'out' => '导出',
+            //'manage/common.out' => '自定义导出',
+        ),
+        'search' => array
+        (
+            'status',
+            'order_num',
+            'seller_order_num',
+            //'channel_order_num',
+            'account',
+            'sku_id' => array
+            (
+                'name' => '商品',
+                'placeholder' => '请选择商品',
+                'type' => 'cascader',
+                'option'    => 'Dever::call("goods/manage.getGoodsSku")',
+                'search' => function($key, $type, $value) {
+                    $value = end($value);
+                    return $value;
+                }
+            ),
+            'finish_date' => array
+            (
+                'name' => '完成时间',
+                'type' => 'date',
+                'date_type' => 'datetimerange',
+                'value_format' => 'YYYY-MM-DD HH:mm:ss',
+                'start_placeholder' => '完成时间',
+                'end_placeholder' => '完成时间',
+                'range_separator' => '至',
+            ),
+            'cdate' => array
+            (
+                'name' => '下单时间',
+                'type' => 'date',
+                'date_type' => 'datetimerange',
+                'value_format' => 'YYYY-MM-DD HH:mm:ss',
+                'start_placeholder' => '下单时间',
+                'end_placeholder' => '下单时间',
+                'range_separator' => '至',
+            ),
+        ),
+    ),
+);

+ 56 - 0
src/dai/seller/table/manage/seller_order_push.php

@@ -0,0 +1,56 @@
+<?php
+$extend = Dever::load('common', 'manage')->extend();
+$seller_id = $extend['data_id'];
+$seller = Dever::db('info', 'seller')->find($seller_id);
+return array
+(
+    'source' => 'seller/order_push',
+    'update' => array
+    (
+        'start' => 'seller/manage.createOrder',
+        'field'    => array
+        (
+            'seller_id' => array
+            (
+                'type' => 'hidden',
+                'default' => $seller_id,
+                'option' => array
+                (
+                    $seller,
+                ),
+                'remote' => 'seller/manage.getGoods',
+            ),
+            'goods' => array
+            (
+                'name' => '商品',
+                'type' => 'cascader',
+                # 仅显示最后一级
+                //'all' => false,
+                //'option'    => 'Dever::call("goods/manage.getGoods")',
+                'remote' => 'goods/manage.getSku',
+                # 无需默认值
+                'remote_default' => false,
+                'rules' => true,
+            ),
+            'goods_id' => array
+            (
+                'name' => '规格',
+                'type' => 'hidden',
+                'rules' => true,
+            ),
+            'sku_id' => array
+            (
+                'name' => '规格',
+                'type' => 'select',
+                'rules' => true,
+            ),
+            'data' => array
+            (
+                'type' => 'textarea',
+                'rows' => 5,
+                'placeholder' => '直接输入要充值的账号,如手机号、卡号等,多个用换行隔开,卡密这里填写数量即可',
+                'rules' => true,
+            ),
+        ),
+    ),
+);

+ 42 - 3
src/yuan/goods/api/Manage.php

@@ -19,30 +19,69 @@ class Manage extends Auth
         }
     }
 
+    # 获取多选规格
+    public function getMulSku($value = false)
+    {
+        $result = $this->sku($value);
+        $result['sku_id']['value'] = array();
+        if (isset($result['sku_id']['option'][0]) && $result['sku_id']['option'][0]['name'] == '无') {
+            $result['sku_id']['option'] = array();
+        }
+        return $result;
+    }
+
     # 获取规格
     public function getSku($value = false)
+    {
+        return $this->sku($value);
+    }
+
+    # 获取全部规格
+    public function getAllSku($value = false)
+    {
+        $set[0] = array
+        (
+            'id' => -1,
+            'name' => '全部规格',
+        );
+        return $this->sku($value, $set);
+    }
+
+    private function sku($value, $set = array())
     {
         if (is_array($value)) {
             $value = end($value);
         }
+        $result = array();
+        $result['sku_id']['value'] = '';
         if (!$value) {
             $result['sku_id']['option'] = array();
             return $result;
         }
-        $result = array();
         $result['goods_id']['value'] = $value;
         $sku = Dever::db('info_sku', 'goods')->select(array('info_id' => $value));
         if ($sku) {
-            $option = array();
+            $option = $set;
+            if ($set) {
+                $result['sku_id']['value'] = -1;
+            }
             foreach ($sku as $k => $v) {
                 if ($v['key'] != -1) {
                     $spec = Dever::db('info_spec_value', 'goods')->find(array('id' => array('in', $v['key'])), array('col' => 'id,group_concat(value) as name', 'group' => 'info_id'));
                     if ($spec) {
                         $spec['id'] = $v['id'];
+                        if (!$set) {
+                            $result['sku_id']['value'] = $v['id'];
+                        }
                         $option[] = $spec;
                     }
                 } else {
-                    $option = array();
+                    $result['sku_id']['value'] = $v['id'];
+                    $option[0] = array
+                    (
+                        'id' => $v['id'],
+                        'name' => '无',
+                    );
                 }
             }
             $result['sku_id']['option'] = $option;

+ 1 - 1
src/yuan/goods/table/manage/core.php

@@ -8,7 +8,7 @@ return array
             'name' => '资源',
             'icon' => 'apps-2-line',
             'sort' => '1',
-            'system' => 'platform',
+            'module' => 'platform',
         ),
         'goods' => array
         (

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor