rabin 7 mesi fa
parent
commit
543bed60a1
85 ha cambiato i file con 1534 aggiunte e 572 eliminazioni
  1. 20 0
      config/setting.php
  2. 2 2
      package/manage/index.html
  3. 2 2
      package/manage/sector.html
  4. 1 1
      package/manage/static/css/213.89045697.css
  5. 1 1
      package/manage/static/css/780.4065063c.css
  6. 1 1
      package/manage/static/css/app.d065fbce.css
  7. 1 1
      package/manage/static/css/vab-chunk-c6f52c3a.c8416701.css
  8. 1 1
      package/manage/static/css/vab-plugins.f6f5c03c.css
  9. 1 1
      package/manage/static/js/213.1c59bfaf.js
  10. 1 1
      package/manage/static/js/592.41e25131.js
  11. 1 1
      package/manage/static/js/780.f3d655d2.js
  12. 1 1
      package/manage/static/js/962.faf0c7f7.js
  13. 0 1
      package/manage/static/js/app.76a45ca5.js
  14. 1 1
      package/manage/static/js/vab-chunk-0b9a05e8.3a2acba3.js
  15. 1 1
      package/manage/static/js/vab-chunk-54e012b3.75c10119.js
  16. 1 1
      package/manage/static/js/vab-chunk-844ca20f.8fd468cb.js
  17. 1 1
      package/manage/static/js/vab-chunk-b3a4eaa1.509e2c01.js
  18. 5 0
      package/manage/static/js/vab-chunk-c6f52c3a.079f4300.js
  19. 0 5
      package/manage/static/js/vab-chunk-c6f52c3a.e361e25b.js
  20. 0 5
      package/manage/static/js/vab-plugins.6ed7f270.js
  21. 5 0
      package/manage/static/js/vab-plugins.fa8bceb3.js
  22. 34 0
      src/place/api/Collect.php
  23. 11 2
      src/place/api/Data.php
  24. 72 1
      src/place/api/Member.php
  25. 54 0
      src/place/api/Review.php
  26. 14 0
      src/place/api/Test.php
  27. 1 8
      src/place/api/Tool.php
  28. 1 1
      src/place/api/Url.php
  29. 60 0
      src/place/lib/Agent.php
  30. 11 7
      src/place/lib/Core.php
  31. 18 0
      src/place/lib/Info.php
  32. 98 0
      src/place/lib/Order.php
  33. 92 0
      src/place/lib/Util.php
  34. 31 0
      src/place/lib/Vip.php
  35. 14 9
      src/place/manage/agent.php
  36. 35 0
      src/place/manage/agent_price.php
  37. 8 1
      src/place/manage/info.php
  38. 15 7
      src/place/manage/place.php
  39. 7 6
      src/place/manage/resource.php
  40. 17 10
      src/place/manage/vip.php
  41. 30 0
      src/place/manage/vip_price.php
  42. 5 12
      src/place/table/agent.php
  43. 46 0
      src/place/table/agent_price.php
  44. 1 1
      src/place/table/code.php
  45. 26 0
      src/place/table/collect.php
  46. 27 7
      src/place/table/info.php
  47. 1 1
      src/place/table/member.php
  48. 75 0
      src/place/table/order.php
  49. 38 0
      src/place/table/order_detail.php
  50. 44 0
      src/place/table/order_refund.php
  51. 6 6
      src/place/table/resource.php
  52. 40 0
      src/place/table/review.php
  53. 7 7
      src/place/table/vip.php
  54. 8 8
      src/place/table/vip_price.php
  55. 22 44
      src/resource/content/api/Member.php
  56. 20 9
      src/resource/content/api/Value.php
  57. 14 0
      src/resource/content/lib/Cate.php
  58. 28 37
      src/resource/content/lib/Info.php
  59. 0 12
      src/resource/content/lib/Review.php
  60. 20 85
      src/resource/content/lib/Value.php
  61. 36 0
      src/resource/content/manage/agent_price.php
  62. 22 7
      src/resource/content/manage/info.php
  63. 9 10
      src/resource/content/manage/vip_price.php
  64. 11 17
      src/resource/content/table/agent_price.php
  65. 0 32
      src/resource/content/table/collect.php
  66. 6 0
      src/resource/content/table/down.php
  67. 3 3
      src/resource/content/table/info.php
  68. 0 87
      src/resource/content/table/order.php
  69. 0 46
      src/resource/content/table/review.php
  70. 3 3
      src/resource/content/table/value.php
  71. 39 0
      src/resource/content/table/vip_price.php
  72. 1 1
      src/resource/func/table/channel.php
  73. 3 3
      src/resource/func/table/info.php
  74. 30 0
      src/resource/goods/api/Data.php
  75. 93 0
      src/resource/goods/lib/Info.php
  76. 0 37
      src/resource/goods/lib/Spec.php
  77. 35 10
      src/resource/goods/manage/info.php
  78. 35 0
      src/resource/goods/manage/sku.php
  79. 10 3
      src/resource/goods/table/info.php
  80. 8 2
      src/resource/goods/table/sku.php
  81. 1 1
      src/resource/goods/table/spec.php
  82. 1 1
      src/resource/goods/table/spec_value.php
  83. 8 0
      src/sector/manage/core.php
  84. 38 0
      src/sector/manage/money.php
  85. 44 0
      src/sector/table/money.php

+ 20 - 0
config/setting.php

@@ -7,6 +7,26 @@ return array
     'lang' => 'zh-cn',
     'lang_pack' => array('zh-cn' => '简体中文', 'en' => '英文'),
 
+    # 定义类型
+    'type' => array
+    (
+        -1 => 'place/info',
+        -2 => 'place/vip',
+        -3 => 'place/agent',
+        -4 => '',
+        -5 => '',
+        -6 => '',
+        1 => 'content/info',
+        2 => 'func/info',
+        3 => 'goods/info',
+        4 => 'agent/info',
+        5 => 'data/info',
+        6 => 'chat/info',
+        7 => '',
+        8 => '',
+        9 => '',
+    ),
+
     # 路由解析设置
     'route' => array
     (

+ 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-08-03 12:46:50-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-08-06 12:35:57-shemic" rel="stylesheet"/><script>document.write(
         "<script type='text/javascript' src='config.js?" +
           Math.random() +
           "'><\/script>"
-      )</script><script defer="defer" src="static/js/app.3f76bf51.js"></script><script defer="defer" src="static/js/213.14b0c596.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.76a45ca5.js"></script><script defer="defer" src="static/js/213.1c59bfaf.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>

+ 2 - 2
package/manage/sector.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-08-03 12:46:50-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-08-06 12:35:57-shemic" rel="stylesheet"/><script>document.write(
         "<script type='text/javascript' src='sector_config.js?" +
           Math.random() +
           "'><\/script>"
-      )</script><script defer="defer" src="static/js/app.3f76bf51.js"></script><script defer="defer" src="static/js/213.14b0c596.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.76a45ca5.js"></script><script defer="defer" src="static/js/213.1c59bfaf.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>

File diff suppressed because it is too large
+ 1 - 1
package/manage/static/css/213.89045697.css


File diff suppressed because it is too large
+ 1 - 1
package/manage/static/css/780.4065063c.css


File diff suppressed because it is too large
+ 1 - 1
package/manage/static/css/app.d065fbce.css


File diff suppressed because it is too large
+ 1 - 1
package/manage/static/css/vab-chunk-c6f52c3a.c8416701.css


File diff suppressed because it is too large
+ 1 - 1
package/manage/static/css/vab-plugins.f6f5c03c.css


File diff suppressed because it is too large
+ 1 - 1
package/manage/static/js/213.1c59bfaf.js


File diff suppressed because it is too large
+ 1 - 1
package/manage/static/js/592.41e25131.js


File diff suppressed because it is too large
+ 1 - 1
package/manage/static/js/780.f3d655d2.js


File diff suppressed because it is too large
+ 1 - 1
package/manage/static/js/962.faf0c7f7.js


File diff suppressed because it is too large
+ 0 - 1
package/manage/static/js/app.76a45ca5.js


File diff suppressed because it is too large
+ 1 - 1
package/manage/static/js/vab-chunk-0b9a05e8.3a2acba3.js


File diff suppressed because it is too large
+ 1 - 1
package/manage/static/js/vab-chunk-54e012b3.75c10119.js


File diff suppressed because it is too large
+ 1 - 1
package/manage/static/js/vab-chunk-844ca20f.8fd468cb.js


File diff suppressed because it is too large
+ 1 - 1
package/manage/static/js/vab-chunk-b3a4eaa1.509e2c01.js


File diff suppressed because it is too large
+ 5 - 0
package/manage/static/js/vab-chunk-c6f52c3a.079f4300.js


File diff suppressed because it is too large
+ 0 - 5
package/manage/static/js/vab-chunk-c6f52c3a.e361e25b.js


File diff suppressed because it is too large
+ 0 - 5
package/manage/static/js/vab-plugins.6ed7f270.js


File diff suppressed because it is too large
+ 5 - 0
package/manage/static/js/vab-plugins.fa8bceb3.js


+ 34 - 0
src/place/api/Collect.php

@@ -0,0 +1,34 @@
+<?php namespace Place\Api;
+use Dever;
+use Place\Lib\Core;
+class Collect extends Core
+{
+    protected $login = true;
+    protected $entry = true;
+
+    # 收藏操作
+    public function up()
+    {
+        $data['type'] = Dever::input('type', 'is_numeric', '类型');
+        $data['type_id'] = Dever::input('type_id', 'is_numeric', '类型ID');
+        $data['uid'] = $this->member['id'];
+        $info = Dever::db('collect', 'place')->find($data);
+        if (!$info) {
+            Dever::db('collect', 'place')->insert($data);
+        }
+        return 'ok';
+    }
+
+    # 取消收藏
+    public function cancel()
+    {
+        $data['type'] = Dever::input('type', 'is_numeric', '类型');
+        $data['type_id'] = Dever::input('type_id', 'is_numeric', '类型ID');
+        $data['uid'] = $this->member['id'];
+        $info = Dever::db('collect', 'place')->find($data);
+        if ($info) {
+            Dever::db('collect', 'place')->delete($info['id']);
+        }
+        return 'ok';
+    }
+}

+ 11 - 2
src/place/api/Data.php

@@ -61,14 +61,23 @@ class Data extends Core
         $account = Dever::input('account', 'is_string', '账户信息');
         $env = Dever::input('env', 'is_numeric', '环境信息', 3);
         $mobile = Dever::input('mobile', 'is_numeric', '手机号');
-        $code = Dever::input('code', 'is_numeric', '验证码');
-        Dever::load('template', 'msg')->check('reg_code', $mobile, $code);
+        $pwd = Dever::input('pwd');
+        if ($pwd) {
+            $code = Dever::input('code', 'is_numeric', '验证码');
+            Dever::load('template', 'msg')->check('reg_code', $mobile, $code);
+        }
         $where['mobile'] = $mobile;
         $member = Dever::db('member', 'place')->find($where);
         if ($member) {
+            if ($pwd && Dever::load('common', 'manage')->hash($pwd, $member['salt']) != $member['password']) {
+                Dever::error('登录失败,密码无效');
+            }
             # 已注册,登录
             $id = $member['id'];
         } else {
+            if ($pwd) {
+                Dever::error('登录失败,账户无效');
+            }
             $data = $where;
             $data['name'] = Str::hide($mobile);
             $data['vip_id'] = -1;

+ 72 - 1
src/place/api/Member.php

@@ -4,5 +4,76 @@ use Place\Lib\Core;
 class Member extends Core
 {
     protected $login = true;
-    
+    protected $entry = true;
+
+    # 我的信息
+    public function info()
+    {
+        $data['place'] = $this->place;
+        $data['resource'] = $this->resource;
+        $data['member'] = $this->member;
+        if ($data['member']['vip_id'] > 0) {
+            $data['vip'] = Dever::db('vip', 'place')->find($data['member']['vip_id']);
+        }
+        if ($data['member']['agent_id'] > 0) {
+            $data['agent'] = Dever::db('agent', 'place')->find($data['member']['agent_id']);
+        }
+        $data['member']['cash_name'] = $data['member']['cash'] . $data['member']['score'];
+        
+        return $data;
+    }
+
+    # 更新我的信息
+    public function update()
+    {
+        $update = array();
+        $name = Dever::input('name');
+        if ($name) {
+            $this->member['name'] = $update['name'] = $name;
+        }
+        $avatar = Dever::input('avatar');
+        if ($avatar) {
+            $this->member['avatar'] = $update['avatar'] = $avatar;
+        }
+        if ($update) {
+            Dever::db('member', 'place')->update($this->member['id'], $update);
+        }
+        return $this->member;
+    }
+
+    # 修改密码
+    public function pwd()
+    {
+        # 大于8位字符,至少包含:小写字母、大写字母、数字、特殊字符
+        $pwd = Dever::input('pwd', '/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[\W_]).{8,}$/', '密码');
+        $code = Dever::input('code', 'is_string', '验证码');
+        Dever::load('template', 'msg')->check('user_code', $this->member['mobile'], $code);
+        $update = Dever::load('manage/common')->createPwd($pwd);
+        Dever::db('member', 'place')->update($this->member['id'], $update);
+    }
+
+    # 发送短信验证码
+    public function sms()
+    {
+        $data = Dever::load('template', 'msg')->send('user_code', array('mobile' => $this->member['mobile']));
+        return $data;
+    }
+
+    # 我的收藏
+    public function collect()
+    {
+        return Dever::load('util', 'place')->getUserData($this->member['id'], 'collect');
+    }
+
+    # 我的评论
+    public function review()
+    {
+        return Dever::load('util', 'place')->getUserData($this->member['id'], 'review', array('content'));
+    }
+
+    # 我的订单
+    public function order()
+    {
+        return Dever::load('util', 'place')->getUserData($this->member['id'], 'order', array('name','cash','num','order_num','status'));
+    }
 }

+ 54 - 0
src/place/api/Review.php

@@ -0,0 +1,54 @@
+<?php namespace Place\Api;
+use Dever;
+use Place\Lib\Core;
+class Review extends Core
+{
+    protected $login = true;
+    protected $entry = true;
+
+    # 评论
+    public function up()
+    {
+        $data['content'] = Dever::input('content', 'is_string', '内容');
+        $data['type'] = Dever::input('type', 'is_numeric', '类型');
+        $data['type_id'] = Dever::input('type_id', 'is_numeric', '类型ID');
+        $data['uid'] = $this->member['id'];
+        $info = Dever::db('review', 'place')->find($data);
+        if ($info) {
+            Dever::error('请不要发布相同内容');
+        } else {
+            Dever::db('review', 'place')->insert($data);
+        }
+        return 'ok';
+    }
+
+    # 删除评论
+    public function cancel()
+    {
+        $data['id'] = Dever::input('review_id', 'is_numeric', '评论');
+        $data['uid'] = $this->member['id'];
+        $info = Dever::db('review', 'place')->delete($data);
+        return 'ok';
+    }
+
+    # 评论列表
+    public function getList()
+    {
+        $data['type'] = Dever::input('type', 'is_numeric', '类型');
+        $data['type_id'] = Dever::input('type_id', 'is_numeric', '类型ID');
+        # 每页10条
+        $set['num'] = 10;
+        $data = Dever::db('review', 'place')->select($where, $set);
+        if ($data) {
+            foreach ($data as &$v) {
+                $v['cdate_str'] = date('Y-m-d H:i:s', $v['cdate']);
+                $v['oper'] = 2;
+                if ($this->member['id'] == $v['uid']) {
+                    $v['oper'] = 1;
+                }
+                $v['user'] = Dever::db('member', 'place')->find($v['uid'], array('col' => 'mobile,name,avatar'));
+            }
+        }
+        return $data;
+    }
+}

+ 14 - 0
src/place/api/Test.php

@@ -0,0 +1,14 @@
+<?php namespace Place\Api;
+use Dever;
+use Place\Lib\Core;
+class Test extends Core
+{
+    protected $login = true;
+    protected $entry = true;
+    # 将订单设置为成功
+    public function order()
+    {
+        Dever::load('order', 'place')->success(Dever::input('p'), Dever::input('order_num'), Dever::input('type'), 1);
+        return 'ok';
+    }
+}

+ 1 - 8
src/place/api/Tool.php

@@ -1,6 +1,5 @@
 <?php namespace Place\Api;
 use Dever;
-use Dever\Helper\Secure;
 class Tool
 {
     # 根据身份码获取入口
@@ -14,12 +13,6 @@ class Tool
         if (!$code) {
             Dever::error('身份码错误');
         }
-        return array('p' => $this->entry($code['sector_id'], $code['module_id'], $code['user_id'], $code['place_id']));
-    }
-
-    public function entry($sector_id, $module_id, $user_id, $place_id)
-    {
-        $entry = Secure::encode($sector_id . '-' . $module_id . '-' . $user_id . '-' . $place_id);
-        return $entry;
+        return array('p' => Dever::load('util', 'place')->entry($code['sector_id'], $code['module_id'], $code['user_id'], $code['place_id']));
     }
 }

+ 1 - 1
src/place/api/Url.php

@@ -15,7 +15,7 @@ class Url extends Core
         $info = Dever::db('info', 'place')->find($id);
         if ($info) {
             $extend = Dever::load('common', 'manage')->extend();
-            $param['p'] = $this->entry($extend['info_id'], $extend['module_id'], $extend['data_id'], $id);
+            $param['p'] = Dever::load('util', 'place')->entry($extend['info_id'], $extend['module_id'], $extend['data_id'], $id);
             $link = Dever::url('place/data.home', $param);
             header('HTTP/1.1 301 Moved Permanently');
             header('Location: ' . $link);

+ 60 - 0
src/place/lib/Agent.php

@@ -20,4 +20,64 @@ class Agent
         $data = array_merge($data, Dever::db('agent', 'place')->select($where));
         return $data;
     }
+
+    # 获取代理购买资源的价格
+    public function getPrice($price, $agent_id, $info_id, $key = 'price', $app = 'content', $type = 1)
+    {
+        if ($agent_id > 0) {
+            $result = '';
+            $info = Dever::db('agent_price', $app)->select(array('info_id' => $info_id));
+            if ($info) {
+                foreach ($info as &$v) {
+                    if ($v['agent_id'] == $agent_id) {
+                        $result = $v[$key];
+                        break;
+                    } elseif (!$v['agent_id']) {
+                        $result = $v[$key];
+                    }
+                }
+                if ($key == 'per') {
+                    if ($result > 0) {
+                        return number_format($price * $result, 2);
+                    }
+                } elseif ($result || $result === '0') {
+                    return number_format($result, 2);
+                }
+            }
+            $info = Dever::db('agent_price', 'place')->find(array('agent_id' => $agent_id, 'type' => $type));
+            if ($info && $info['per']) {
+                $result = number_format($price * $info['per'], 2);
+                return $result;
+            }
+        }
+        return null;
+    }
+
+    # 获取佣金
+    public function getFee($price, $agent_id, $info_id, $app = 'content', $type = 1)
+    {
+        if ($agent_id > 0) {
+            $result = '';
+            $info = Dever::db('agent_price', $app)->select(array('info_id' => $info_id));
+            if ($info) {
+                foreach ($info as &$v) {
+                    if ($v['agent_id'] == $agent_id) {
+                        $result = $v['fee'];
+                        break;
+                    } elseif (!$v['agent_id']) {
+                        $result = $v['fee'];
+                    }
+                }
+                if ($result > 0) {
+                    return number_format($price * $result/100, 2);
+                }
+            }
+            $info = Dever::db('agent_price', 'place')->find(array('agent_id' => $agent_id, 'type' => $type));
+            if ($info && $info['fee'] > 0) {
+                $result = number_format($price * $info['fee']/100, 2);
+                return $result;
+            }
+        }
+        return null;
+    }
 }

+ 11 - 7
src/place/lib/Core.php

@@ -20,21 +20,25 @@ class Core
             Dever::error('信息有误');
         }
         # 切换数据库
-        $token = Dever::load('common', 'manage')->token(-1, '', $system['partition'], $system['id'], $sector_id, $module_id, $user_id);
-        Route::$data['authorization'] = Secure::encode($token['token']);
+        Dever::load('common', 'manage')->setAuth($system['partition'], $system['id'], $sector_id, $module_id, $user_id);
         
-        $this->place = Dever::db('info', 'place')->find($place_id, array('col' => 'id,name,uid,cdate,logo,content,score,score_per,bg,type'));
+        $this->place = Dever::db('info', 'place')->find($place_id, array('col' => 'id,name,uid,cdate,logo,content,score,score_per,bg,type,vip_name,agent_name'));
         if (!$this->place) {
             Dever::error('信息有误');
         }
+        if (!$this->place['vip_name']) {
+            $this->place['vip_name'] = '会员';
+        }
+        if (!$this->place['agent_name']) {
+            $this->place['agent_name'] = '代理';
+        }
         $this->place['content'] = htmlspecialchars_decode($this->place['content']);
 
         # 切换数据库
         $module = Dever::db('system_module', 'manage')->find(array('key' => 'sector_place'));
-        $token = Dever::load('common', 'manage')->token(-1, '', $system['partition'], $system['id'], $sector_id, $module['id'], $place_id);
-        Route::$data['authorization'] = Secure::encode($token['token']);
+        Dever::load('common', 'manage')->setAuth($system['partition'], $system['id'], $sector_id, $module['id'], $place_id);
 
-        $this->resource = Dever::db('resource', 'place')->select([], array('col' => 'id,name,icon,type'));
+        $this->resource = Dever::db('resource', 'place')->select(['status' => 1], array('col' => 'id,name,icon,type'));
 
         $this->member = array();
         $t = Dever::input('t');
@@ -44,7 +48,7 @@ class Core
         if ($t) {
             if ($t = Secure::checkLogin($t)) {
                 if ($t['uid'] && $t['uid'] > 0) {
-                    $this->member = Dever::db('member', 'place')->find($t['uid'], array('col' => 'id,name,cash,vip_id,agent_id'));
+                    $this->member = Dever::db('member', 'place')->find($t['uid'], array('col' => 'id,name,avatar,cash,vip_id,agent_id'));
                 }
                 if ($this->login && !$this->member) {
                     $this->showLogin();

+ 18 - 0
src/place/lib/Info.php

@@ -66,4 +66,22 @@ class Info
             }
         }
     }
+
+    # 获取资源类型
+    public function resourceType($type)
+    {
+        return Dever::db('resource', 'place')->value('type', $type);
+    }
+
+    # 设置一些资源操作的分区,-1是身份-2是会员-3是代理-4-5-6保留,1是内容2是功能3是商品4是角色5是数据6是聊天789保留
+    public function funcType()
+    {
+        return array
+        (
+            'type' => 'list',
+            'field' => 'type', 
+            'value' => array_keys(Dever::config('setting')['type'])
+        );
+        return $type;
+    }
 }

+ 98 - 0
src/place/lib/Order.php

@@ -0,0 +1,98 @@
+<?php namespace Place\Lib;
+use Dever;
+class Order
+{
+    # 下单
+    public function pay($member, $info, $type = 1, $prefix = 'C')
+    {
+        $account = Dever::input('account', 'is_string', '账户', 'wechat');
+        $env = Dever::input('env', 'is_numeric', '运行环境', 3);
+        $result = Dever::load('util', 'api')->openid($account, $env, $member['id']);
+        if (isset($result['openid'])) {
+            $member['openid'] = $result['openid'];
+        } elseif (isset($result['link'])) {
+            return $result;
+        }
+
+        # 支付账户
+        $account = 'pay_' . $account;
+        # 下单
+        $order = array
+        (
+            'uid' => $member['id'],
+            'openid' => $member['openid'] ?? '',
+            'order_num' => Dever::load('util', 'api')->createNumber($prefix, 'place/order', array('type' => $type)),
+            'cash' => ($info['price']/$member['score_per'])*100,#每个人的积分换算公式可能不一样
+            'name' => $info['name'],
+            'time_expire' => time() + 3600,
+        );
+        # 设置支付成功的回调信息,多个参数用|隔开
+        $param['notify'] = 'place/order.success|' . Dever::input('p') . '|' . $order['order_num'] . '|' . $type;
+        $data = Dever::load('account', 'api')->run($account, 'order', $order, $env);
+        if ($data) {
+            $order['status'] = 1;
+            $order['type'] = $type;
+            $order['type_id'] = $info['id'];
+            $data['order_id'] = Dever::db('order', 'place')->insert($order);
+            $data['order_num'] = $order['order_num'];
+            if (isset($info['detail'])) {
+                $detail['type'] = $type;
+                foreach ($info['detail'] as $k => $v) {
+                    $detail['type_id'] = $v['id'];
+                    $detail['order_id'] = $data['order_id'];
+                    $detail['cash'] = $v['cash'];
+                    $detail['num'] = $v['num'];
+                    $detail['status'] = 1;
+                    Dever::db('order_detail', 'place')->insert($detail);
+                }
+            }
+        }
+        return $data;
+    }
+
+    # 支付成功
+    public function success($place, $order_num, $type, $status, $body = array())
+    {
+        Dever::input('authorization', 'is_string', '入口码', $place);
+        $order = Dever::db('order', 'place')->find(array('type' => $type, 'order_num' => $order_num));
+        if ($order && $order['status'] == 1) {
+            if ($type == 3) {
+                if ($status == 1) {
+                    $update['status'] = 5;
+                } else {
+                    $update['status'] = 7;
+                }
+            } else {
+                if ($status == 1) {
+                    $update['status'] = 2;
+                } else {
+                    $update['status'] = 7;
+                }
+            }
+            
+            $update['pdate'] = time();
+            $state = Dever::db('order', 'place')->update($order['id'], $update);
+            if (!$state) {
+                return '订单更新失败';
+            }
+        }
+    }
+
+    # 获取某个资源的订单
+    public function getInfoByType($type, $type_id, $uid, $status = 5)
+    {
+        $order = Dever::db('order', 'place')->find(array('type' => $type, 'type_id' => $type_id, 'uid' => $uid, 'status' => $status));
+        return $order;
+    }
+
+    # 获取某个订单的详情
+    public function getDetail($type, $id)
+    {
+        $detail = Dever::db('order_detail', 'place')->select(array('type' => $type, 'order_id' => $id));
+        $result = array();
+        if ($detail) {
+
+        }
+        return $result;
+    }
+}

+ 92 - 0
src/place/lib/Util.php

@@ -0,0 +1,92 @@
+<?php namespace Place\Lib;
+use Dever;
+class Util
+{
+    # 根据类型获取表信息
+    public function getTypeInfo($type, $type_id)
+    {
+        $where = array('id' => $type_id, 'status' => 1);
+        $table = Dever::config('setting')['type'][$type] ?? '';
+        if ($table) {
+            return Dever::db($table)->find($where);
+        }
+        return false;
+    }
+
+    # 获取用户相关的信息
+    public function getUserData($uid, $name = 'collect', $field = array(), $page = 10)
+    {
+        $type = Dever::input('type');
+        $where['uid'] = $uid;
+        //$where['status'] = 1;
+        if ($type) {
+            $where['type'] = $type;
+        }
+        # 每页10条
+        $set['num'] = $page;
+        $data = Dever::db($name, 'place')->select($where, $set);
+        $result = array();
+        if ($data) {
+            foreach ($data as $k => $v) {
+                $info = $this->getTypeInfo($v['type'], $v['type_id']);
+                if ($info) {
+                    $info[$name . '_id'] = $v['id'];
+                    $info['cdate'] = $v['cdate'];
+                    $info['cdate_str'] = date('Y-m-d H:i:s', $info['cdate']);
+                    if ($field) {
+                        foreach ($field as $v1) {
+                            $info[$v1] = $v[$v1];
+                        }
+                    }
+                    if ($type == 3) {
+                        $info['detail'] = Dever::load('order', 'place')->getDetail($type, $v['id']);
+                    }
+                    $result[] = $info;
+                }
+            }
+        }
+        return $result;
+    }
+
+    public function entry($sector_id, $module_id, $user_id, $place_id)
+    {
+        $entry = \Dever\Helper\Secure::encode($sector_id . '-' . $module_id . '-' . $user_id . '-' . $place_id);
+        return $entry;
+    }
+
+    public function getManageType($field)
+    {
+        $db = Dever::db('resource', 'place');
+        $option = array();
+        foreach ($db->value('type') as $k => $v) {
+            $info = array('type' => $v['id'], 'status' => 1);
+            foreach ($field as $k1 => $v1) {
+                if (isset($v[$v1])) {
+                    $v1 = $v[$v1];
+                }
+                $info[$k1] = $v1;
+            }
+            $option[] = $info;
+        }
+        return $option;
+    }
+
+    public function getPrice($price, $member, $info_id, $key = 'price', $app = 'content', $type = 1)
+    {
+        $vip_price = Dever::load('vip', 'place')->getPrice($price, $member['vip_id'], $info_id, $key, $app, $type);
+        $agent_price = Dever::load('agent', 'place')->getPrice($price, $member['agent_id'], $info_id, $key, $app, $type);
+
+        if (!is_null($vip_price) && !is_null($agent_price)) {
+            if ($agent_price < $vip_price) {
+                $price = $agent_price;
+            } else {
+                $price = $vip_price;
+            }
+        } elseif (!is_null($vip_price)) {
+            $price = $vip_price;
+        } elseif (!is_null($agent_price)) {
+            $price = $agent_price;
+        }
+        return $price;
+    }
+}

+ 31 - 0
src/place/lib/Vip.php

@@ -43,4 +43,35 @@ class Vip
         $data = array_merge($data, Dever::db('vip', 'source')->select($where));
         return $data;
     }
+
+    # 获取会员购买资源的价格
+    public function getPrice($price, $vip_id, $info_id, $key = 'price', $app = 'content', $type = 1)
+    {
+        if ($vip_id > 0) {
+            $result = '';
+            $info = Dever::db('vip_price', $app)->select(array('info_id' => $info_id));
+            if ($info) {
+                foreach ($info as &$v) {
+                    if ($v['vip_id'] == $vip_id) {
+                        $result = $v[$key];
+                        break;
+                    } elseif (!$v['vip_id']) {
+                        $result = $v[$key];
+                    }
+                }
+                if ($key == 'per') {
+                    if ($result > 0) {
+                        return number_format($price * $result, 2);
+                    }
+                } elseif ($result || $result === '0') {
+                    return number_format($result, 2);
+                }
+            }
+            $info = Dever::db('vip_price', 'place')->find(array('vip_id' => $vip_id, 'type' => $type));
+            if ($info && $info['per'] > 0) {
+                return number_format($price * $info['per'], 2);
+            }
+        }
+        return null;
+    }
 }

+ 14 - 9
src/place/manage/agent.php

@@ -6,10 +6,7 @@ return array
         'field'      => array
         (
             'name',
-            'level' => array
-            (
-                'name' => '等级',
-            ),
+            'level',
             'price',
 
             'status' => array
@@ -35,6 +32,11 @@ return array
     ),
     'update' => array
     (
+        'tab' => array
+        (
+            '基本信息' => 'name,level,price,content',
+            '权益设置' => 'place/agent_price',
+        ),
         'field'    => array
         (
             'name' => array
@@ -50,11 +52,6 @@ return array
             (
                 'rules' => true,
             ),
-            'fee' => array
-            (
-                'rules' => true,
-                'desc' => '输入10,就是下游消费的10%计算为佣金',
-            ),
             'content' => array
             (
                 'type' => 'editor',
@@ -64,6 +61,14 @@ return array
                     'uploadVideo' => 3,
                 ),
             ),
+
+            'place/agent_price' => array
+            (
+                'name' => '折扣设置',
+                'where'  => array('agent_id' => 'id'),
+                'desc' => '设置购买资源的折扣,如果资源里单独设置了“代理折扣/价格”或者“代理佣金”,此处相应的设置将失效',
+                'default' => Dever::load('util', 'place')->getManageType(array('per' => '')),
+            ),
         ),
     ),
 );

+ 35 - 0
src/place/manage/agent_price.php

@@ -0,0 +1,35 @@
+<?php
+return array
+(
+    'update' => array
+    (
+        'field'    => array
+        (
+            'type' => 'hidden',
+            'type_name' => array
+            (
+                'name' => '资源类型',
+                'type' => 'show',
+                'default' => 'Dever::call("place/info.resourceType", "{type}")',
+            ),
+            'per' => array
+            (
+                'tips' => '资源价格*折扣=代理价格',
+                'placeholder' => '资源价格*折扣=代理价格',
+            ),
+            'fee' => array
+            (
+                'tips' => '资源价格*佣金比例%=代理佣金',
+                'placeholder' => '资源价格*佣金比例%=代理佣金',
+            ),
+            'status' => array
+            (
+                'width' => '40',
+                'type' => 'switch',
+                'show'  => '{status}',
+                'active_value' => 1,
+                'inactive_value' => 2,
+            ),
+        ),
+    ),
+);

+ 8 - 1
src/place/manage/info.php

@@ -1,6 +1,13 @@
 <?php
 $config = include('place.php');
-$config['update']['tab']['资源设置'] = 'place/resource';
+$config['update']['field']['place/resource'] = array
+(
+    'name' => '资源选项',
+    'where'  => array('id' => array('>', 0)),
+    'desc' => '设置要展示的资源选项',
+    'default' => Dever::load('util', 'place')->getManageType(array('name' => 'name')),
+);
+$config['update']['tab']['展示设置'] = 'vip_name,agent_name,place/resource';
 $config['update']['column'] = array
 (
     'load' => 'place/info',

+ 15 - 7
src/place/manage/place.php

@@ -39,7 +39,7 @@ return array
         'tab' => array
         (
             '基本信息' => 'uid,name,code,type,password,price,logo,bg,content',
-            '积分设置' => 'score,score_per',
+            '支付设置' => 'money_id,score,score_per',
         ),
         'field'    => array
         (
@@ -56,15 +56,19 @@ return array
                 //'rules' => true,
                 'desc' => '设置身份码之后,用户将可以通过身份码快速进入,身份码不能重复',
             ),
+            'money_id' => array
+            (
+                'tips' => '设置支付使用的货币',
+            ),
             'score' => array
             (
                 'rules' => true,
-                'desc' => '设置积分名称',
+                'desc' => '设置购买资源所使用的积分名称,除“商品”外,其余资源均使用积分支付',
             ),
             'score_per' => array
             (
                 'rules' => true,
-                'desc' => '设置积分与1元人民币的换算数字,如100就是100个积分换算成1元人民币'
+                'desc' => '设置积分与1元货币的换算数字,如输入100就是100个积分换算成1元货币'
             ),
             'logo' => array
             (
@@ -110,11 +114,15 @@ return array
                 'desc' => '设置价格后,用户购买后才能进入',
             ),
 
-            'place/resource' => array
+
+            'vip_name' => array
+            (
+                'desc' => '设置“会员”的称谓,未设置则显示“会员”',
+            ),
+
+            'agent_name' => array
             (
-                'name' => '资源选项',
-                'where'  => array('id' => array('>', 0)),
-                'desc' => '设置要展示的资源选项',
+                'desc' => '设置“代理”的称谓,未设置则显示“代理”',
             ),
         ),
         'control' => array

+ 7 - 6
src/place/manage/resource.php

@@ -5,21 +5,22 @@ return array
     (
         'field'    => array
         (
-            'type' => array
+            'type' => 'hidden',
+            'type_name' => array
             (
-                'type' => 'select',
+                'name' => '资源类型',
+                'type' => 'show',
+                'default' => 'Dever::call("place/info.resourceType", "{type}")',
             ),
             'name',
+            /*
             'icon' => array
             (
                 'type' => 'upload',
                 'upload' => 1,
-                'yun' => true,
-                'limit' => 1,
                 'multiple' => false,
-                'tip' => '',
                 'style' => 'input',
-            ),
+            ),*/
             'status' => array
             (
                 'width' => '40',

+ 17 - 10
src/place/manage/vip.php

@@ -6,14 +6,8 @@ return array
         'field'      => array
         (
             'name',
-            'level' => array
-            (
-                'name' => '等级',
-            ),
-            'day_desc' => array
-            (
-                'name' => '时长',
-            ),
+            'level',
+            'day_desc',
             'price',
 
             'status' => array
@@ -39,6 +33,11 @@ return array
     ),
     'update' => array
     (
+        'tab' => array
+        (
+            '基本信息' => 'name,level,price,day_desc,day,content',
+            '权益设置' => 'place/vip_price',
+        ),
         'field'    => array
         (
             'name' => array
@@ -57,12 +56,12 @@ return array
             'day_desc' => array
             (
                 'rules' => true,
-                'desc' => '设置时长名称,如一年',
+                'desc' => '设置会员时长名称,如一年',
             ),
             'day' => array
             (
                 'rules' => true,
-                'desc' => '设置时长天数,如365',
+                'desc' => '设置会员时长天数,如365,如果填写-1就是该会员永久有效',
             ),
             'content' => array
             (
@@ -73,6 +72,14 @@ return array
                     'uploadVideo' => 3,
                 ),
             ),
+
+            'place/vip_price' => array
+            (
+                'name' => '折扣设置',
+                'where'  => array('vip_id' => 'id'),
+                'desc' => '设置购买资源的折扣,如果资源里单独设置了“会员价格”,此处设置将失效',
+                'default' => Dever::load('util', 'place')->getManageType(array('per' => '')),
+            ),
         ),
     ),
 );

+ 30 - 0
src/place/manage/vip_price.php

@@ -0,0 +1,30 @@
+<?php
+return array
+(
+    'update' => array
+    (
+        'field'    => array
+        (
+            'type' => 'hidden',
+            'type_name' => array
+            (
+                'name' => '资源类型',
+                'type' => 'show',
+                'default' => 'Dever::call("place/info.resourceType", "{type}")',
+            ),
+            'per' => array
+            (
+                'tips' => '资源价格乘以折扣就是当前会员价格',
+                'placeholder' => '资源价格*折扣=会员价格',
+            ),
+            'status' => array
+            (
+                'width' => '40',
+                'type' => 'switch',
+                'show'  => '{status}',
+                'active_value' => 1,
+                'inactive_value' => 2,
+            ),
+        ),
+    ),
+);

+ 5 - 12
src/place/table/agent.php

@@ -9,22 +9,15 @@ return array
         'name' => array
         (
             'name'      => '代理名称',
-            'type'      => 'varchar(200)',
+            'type'      => 'varchar(30)',
         ),
 
         'price' => array
         (
-            'name'      => '价格',
+            'name'      => '代理价格',
             'type'      => 'decimal(11,2)',
         ),
 
-        'fee' => array
-        (
-            'name'      => '佣金比例',
-            'type'      => 'varchar(200)',
-            'default'   => '10',
-        ),
-
         'level' => array
         (
             'name'      => '代理等级',
@@ -34,13 +27,13 @@ return array
 
         'content' => array
         (
-            'name'      => '介绍',
-            'type'      => 'text(255)',
+            'name'      => '代理介绍',
+            'type'      => 'varchar(2000)',
         ),
         
         'status' => array
         (
-            'name'      => '状态',
+            'name'      => '代理状态',
             'type'      => 'tinyint(1)',
             'default'   => 1,
             'value'     => array

+ 46 - 0
src/place/table/agent_price.php

@@ -0,0 +1,46 @@
+<?php
+return array
+(
+    'name' => '代理价格设置表',
+    'partition' => 'Dever::call("manage/common.system")',
+    'order' => 'id asc',
+    'struct' => array
+    (
+        'agent_id' => array
+        (
+            'name'      => '代理id',
+            'type'      => 'int(11)',
+        ),
+
+        'type' => array
+        (
+            'name'      => '资源类型',
+            'type'      => 'tinyint(1)',
+            'default'   => 1,
+        ),
+
+        'per' => array
+        (
+            'name'      => '折扣',
+            'type'      => 'varchar(11)',
+        ),
+
+        'fee' => array
+        (
+            'name'      => '佣金比例',
+            'type'      => 'varchar(11)',
+        ),
+        
+        'status' => array
+        (
+            'name'      => '状态',
+            'type'      => 'tinyint(1)',
+            'default'   => 1,
+            'value'     => array
+            (
+                1 => '开启',
+                2 => '禁用',
+            ),
+        ),
+    ),
+);

+ 1 - 1
src/place/table/code.php

@@ -31,7 +31,7 @@ return array
         'code' => array
         (
             'name'      => '身份码',
-            'type'      => 'varchar(500)',
+            'type'      => 'varchar(80)',
         ),
     ),
 );

+ 26 - 0
src/place/table/collect.php

@@ -0,0 +1,26 @@
+<?php
+return array
+(
+    'name' => '收藏表',
+    'partition' => 'Dever::call("manage/common.system", array(false, true, "place/info.funcType"))',
+    'struct' => array
+    (
+        'uid'       => array
+        (
+            'type'      => 'int(11)',
+            'name'      => '用户',
+        ),
+
+        'type'        => array
+        (
+            'type'      => 'tinyint(1)',
+            'name'      => '类型',
+        ),
+
+        'type_id'        => array
+        (
+            'type'      => 'int(11)',
+            'name'      => '类型ID',
+        ),
+    ),
+);

+ 27 - 7
src/place/table/info.php

@@ -27,34 +27,46 @@ return array
         'name' => array
         (
             'name'      => '名称',
-            'type'      => 'varchar(200)',
+            'type'      => 'varchar(32)',
         ),
         'logo' => array
         (
             'name'      => '头像',
-            'type'      => 'varchar(200)',
+            'type'      => 'varchar(150)',
         ),
         'bg' => array
         (
             'name'      => '背景图',
-            'type'      => 'varchar(200)',
+            'type'      => 'varchar(150)',
         ),
         'content' => array
         (
             'name'      => '介绍',
-            'type'      => 'text(255)',
+            'type'      => 'varchar(2000)',
         ),
 
         'password' => array
         (
             'name'      => '密码',
-            'type'      => 'varchar(500)',
+            'type'      => 'varchar(32)',
         ),
 
         'code' => array
         (
             'name'      => '身份码',
-            'type'      => 'varchar(500)',
+            'type'      => 'varchar(80)',
+        ),
+
+        'vip_name' => array
+        (
+            'name'      => '会员称谓',
+            'type'      => 'varchar(32)',
+        ),
+
+        'agent_name' => array
+        (
+            'name'      => '代理称谓',
+            'type'      => 'varchar(32)',
         ),
 
         'price' => array
@@ -63,10 +75,18 @@ return array
             'type'      => 'decimal(11,2)',
         ),
 
+        'money_id' => array
+        (
+            'name'      => '支付货币',
+            'type'      => 'int(11)',
+            'default'   => '1',
+            'value'     => 'sector/money',
+        ),
+
         'score' => array
         (
             'name'      => '积分名称',
-            'type'      => 'varchar(500)',
+            'type'      => 'varchar(32)',
             'default'   => '金币',
         ),
 

+ 1 - 1
src/place/table/member.php

@@ -47,7 +47,7 @@ return array
         'avatar' => array
         (
             'name'      => '头像',
-            'type'      => 'varchar(300)',
+            'type'      => 'varchar(150)',
         ),
         'entry_type' => array
         (

+ 75 - 0
src/place/table/order.php

@@ -0,0 +1,75 @@
+<?php
+return array
+(
+    'name' => '支付订单表',
+    'partition' => 'Dever::call("manage/common.system", array(false, true, "place/info.funcType"))',
+    'struct' => array
+    (
+        'type'        => array
+        (
+            'type'      => 'tinyint(1)',
+            'name'      => '类型',
+        ),
+
+        'type_id'        => array
+        (
+            'type'      => 'int(11)',
+            'name'      => '类型ID',
+        ),
+
+        'uid'       => array
+        (
+            'type'      => 'int(11)',
+            'name'      => '用户',
+        ),
+
+        'name'      => array
+        (
+            'type'      => 'varchar(80)',
+            'name'      => '订单名称',
+        ),
+
+        'order_num'        => array
+        (
+            'type'      => 'varchar(60)',
+            'name'      => '订单号',
+        ),
+
+        'cash'      => array
+        (
+            'type'      => 'decimal(11,2)',
+            'name'      => '订单金额',
+        ),
+
+        'num'      => array
+        (
+            'type'      => 'decimal(11,2)',
+            'name'      => '订单数量',
+        ),
+
+        'status'        => array
+        (
+            'type'      => 'tinyint(1)',
+            'name'      => '订单状态',
+            'default'   => '1',
+            'value'         => array
+            (
+                1 => '待支付',
+                2 => '待处理',
+                3 => '处理中',
+                4 => '待确认',
+                5 => '已完成',
+                6 => '已完成(有退款)',
+                7 => '已取消',
+                8 => '已退款',
+                9 => '已过期',
+            ),
+        ),
+
+        'pdate'       => array
+        (
+            'type'      => 'int(11)',
+            'name'      => '付款时间',
+        ),
+    ),
+);

+ 38 - 0
src/place/table/order_detail.php

@@ -0,0 +1,38 @@
+<?php
+return array
+(
+    'name' => '支付订单明细表',
+    'partition' => 'Dever::call("manage/common.system", array(false, true, "place/info.funcType"))',
+    'struct' => array
+    (
+        'type'        => array
+        (
+            'type'      => 'tinyint(1)',
+            'name'      => '类型',
+        ),
+
+        'type_id'        => array
+        (
+            'type'      => 'int(11)',
+            'name'      => '类型ID',
+        ),
+
+        'order_id'       => array
+        (
+            'type'      => 'int(11)',
+            'name'      => '订单ID',
+        ),
+
+        'cash'      => array
+        (
+            'type'      => 'decimal(11,2)',
+            'name'      => '明细金额',
+        ),
+
+        'num'      => array
+        (
+            'type'      => 'decimal(11,2)',
+            'name'      => '明细数量',
+        ),
+    ),
+);

+ 44 - 0
src/place/table/order_refund.php

@@ -0,0 +1,44 @@
+<?php
+return array
+(
+    'name' => '退款单表',
+    'partition' => 'Dever::call("manage/common.system", array(false, true, "place/info.funcType"))',
+    'struct' => array
+    (
+        'type'        => array
+        (
+            'type'      => 'tinyint(1)',
+            'name'      => '类型',
+        ),
+
+        'type_id'        => array
+        (
+            'type'      => 'int(11)',
+            'name'      => '类型ID',
+        ),
+
+        'order_id'       => array
+        (
+            'type'      => 'int(11)',
+            'name'      => '订单ID',
+        ),
+
+        'detail_id'       => array
+        (
+            'type'      => 'int(11)',
+            'name'      => '明细ID',
+        ),
+
+        'cash'      => array
+        (
+            'type'      => 'decimal(11,2)',
+            'name'      => '退款金额',
+        ),
+
+        'num'      => array
+        (
+            'type'      => 'decimal(11,2)',
+            'name'      => '退款数量',
+        ),
+    ),
+);

+ 6 - 6
src/place/table/resource.php

@@ -16,19 +16,19 @@ return array
                 1 => '内容',
                 2 => '功能',
                 3 => '商品',
-                4 => '角色',
-                5 => '数据',
+                //4 => '角色',
+                //5 => '数据',
                 //6 => '聊天',
             ),
         ),
         'icon' => array
         (
             'name'      => '图标',
-            'type'      => 'varchar(300)',
+            'type'      => 'varchar(150)',
         ),
         'name' => array
         (
-            'name'      => '资源名称',
+            'name'      => '展示名称',
             'type'      => 'varchar(32)',
         ),
 
@@ -60,8 +60,8 @@ return array
             '"内容",1,1,' . DEVER_TIME,
             '"功能",2,2,' . DEVER_TIME,
             '"商品",3,3,' . DEVER_TIME,
-            '"角色",4,4,' . DEVER_TIME,
-            '"数据",5,5,' . DEVER_TIME,
+            //'"角色",4,4,' . DEVER_TIME,
+            //'"数据",5,5,' . DEVER_TIME,
         ),
         'num' => 1,
     ),

+ 40 - 0
src/place/table/review.php

@@ -0,0 +1,40 @@
+<?php
+return array
+(
+    'name' => '评价表',
+    'partition' => 'Dever::call("manage/common.system", array(false, true, "place/info.funcType"))',
+    'order' => 'sort asc',
+    'struct' => array
+    (
+        'type'        => array
+        (
+            'type'      => 'tinyint(1)',
+            'name'      => '类型',
+        ),
+
+        'type_id'        => array
+        (
+            'type'      => 'int(11)',
+            'name'      => '类型ID',
+        ),
+
+        'uid'       => array
+        (
+            'type'      => 'int(11)',
+            'name'      => '用户',
+        ),
+
+        'content'       => array
+        (
+            'name'      => '内容',
+            'type'      => 'varchar(2000)',
+        ),
+
+        'sort' => array
+        (
+            'name'      => '排序',
+            'type'      => 'int(11)',
+            'default'   => '1',
+        ),
+    ),
+);

+ 7 - 7
src/place/table/vip.php

@@ -9,19 +9,19 @@ return array
         'name' => array
         (
             'name'      => '会员名称',
-            'type'      => 'varchar(200)',
+            'type'      => 'varchar(32)',
         ),
 
         'price' => array
         (
-            'name'      => '价格',
+            'name'      => '会员价格',
             'type'      => 'decimal(11,2)',
         ),
 
         'day_desc' => array
         (
-            'name'      => '时长名称',
-            'type'      => 'varchar(200)',
+            'name'      => '会员时长',
+            'type'      => 'varchar(32)',
         ),
 
         'day' => array
@@ -39,13 +39,13 @@ return array
 
         'content' => array
         (
-            'name'      => '介绍',
-            'type'      => 'text(255)',
+            'name'      => '会员介绍',
+            'type'      => 'varchar(2000)',
         ),
         
         'status' => array
         (
-            'name'      => '状态',
+            'name'      => '会员状态',
             'type'      => 'tinyint(1)',
             'default'   => 1,
             'value'     => array

+ 8 - 8
src/place/table/vip_set.php → src/place/table/vip_price.php

@@ -1,8 +1,9 @@
 <?php
 return array
 (
-    'name' => '会员设置表',
+    'name' => '会员价格设置表',
     'partition' => 'Dever::call("manage/common.system")',
+    'order' => 'id asc',
     'struct' => array
     (
         'vip_id' => array
@@ -16,13 +17,12 @@ return array
             'name'      => '资源类型',
             'type'      => 'tinyint(1)',
             'default'   => 1,
-            'value'     => array
-            (
-                1 => '内容',
-                2 => '功能',
-                3 => '电商',
-                4 => '数据',
-            ),
+        ),
+
+        'per' => array
+        (
+            'name'      => '折扣',
+            'type'      => 'varchar(20)',
         ),
         
         'status' => array

+ 22 - 44
src/resource/content/api/Member.php

@@ -6,52 +6,30 @@ class Member extends Core
     protected $login = true;
     protected $entry = true;
 
-    # 我的信息
-    public function info()
-    {
-        $data['member'] = $this->member;
-        return $data;
-    }
-
-    # 更新我的信息
-    public function update()
-    {
-        $update = array();
-        $name = Dever::input('name');
-        if ($name) {
-            $this->member['name'] = $update['name'] = $name;
-        }
-        $avatar = Dever::input('avatar');
-        if ($avatar) {
-            $this->member['avatar'] = $update['avatar'] = $avatar;
-        }
-        if ($update) {
-            Dever::db('member', 'place')->update($this->member['id'], $update);
-        }
-        return $this->member;
-    }
-
-    # 修改密码
-    public function pwd()
-    {
-        $code = Dever::input('code', 'is_string', '验证码');
-    }
-
-    # 我的收藏
-    public function collect()
-    {
-
-    }
-
     # 我的下载
     public function down()
     {
-
-    }
-
-    # 我的评论
-    public function review()
-    {
-
+        $where['uid'] = $this->member['id'];
+        # 每页10条
+        $set['num'] = 10;
+        $data = Dever::db('down', 'content')->select($where, $set);
+        $result = array();
+        if ($data) {
+            foreach ($data as $k => $v) {
+                $info = Dever::db('info', 'content')->find($v['info_id']);
+                if ($info['status'] == 1) {
+                    $value = Dever::db('value', 'content')->find($v['info_value_id']);
+                    if ($value) {
+                        $info['down_id'] = $v['id'];
+                        $info['cdate'] = $v['cdate'];
+                        $info['cdate_str'] = date('Y-m-d H:i:s', $info['cdate']);
+                        $info['value_name'] = $value['name'];
+                        # 这里是否要再次下载?先不用吧
+                        $result[] = $info;
+                    }
+                }
+            }
+        }
+        return $result;
     }
 }

+ 20 - 9
src/resource/content/api/Value.php

@@ -16,15 +16,26 @@ class Value extends Core
     # 购买附件
     public function buy()
     {
-        $account = Dever::input('account', 'is_string', '账户', 'wechat');
-        $env = Dever::input('env', 'is_numeric', '运行环境', 3);
-        $result = Dever::load('util', 'api')->openid($account, $env, $this->member['id']);
-        if (isset($result['openid'])) {
-            $this->member['openid'] = $result['openid'];
-        } elseif (isset($result['link'])) {
-            return $result;
-        }
         $info = Dever::load('value', 'content')->getInfo($this->member);
-        return Dever::load('value', 'content')->getPay($this->member, $info, $account, $env);
+        return Dever::load('order', 'place')->pay($this->member, $info, 1, 'C');
+    }
+
+    # 下载某个附件
+    public function down()
+    {
+        $g = \Dever\Helper\Secure::decode(Dever::input('g'));
+        if (!$g) {
+            Dever::error('信息有误');
+        }
+        $info = Dever::load('value', 'content')->getInfo($this->member, $g);
+        if (isset($info['value']) && $info['value']) {
+            # 记录下载次数
+            $data['uid'] = $this->member['id'];
+            $data['info_id'] = $info['id'];
+            $data['value_id'] = $info['value']['id'];
+            Dever::db('down', 'content')->insert($data);
+            header('location:' . $info['value']['file']);
+        }
+        Dever::error('信息有误');
     }
 }

+ 14 - 0
src/resource/content/lib/Cate.php

@@ -2,6 +2,20 @@
 use Dever;
 class Cate
 {
+    public function update($db, $data)
+    {
+        if ($data['cate']) {
+            $data['cate'] = explode(',', $data['cate']);
+            $update['cate_parent_id'] = $data['cate'][0];
+            if (isset($data['cate'][1])) {
+                $update['cate_child_id'] = $data['cate'][1];
+            } else {
+                $update['cate_child_id'] = 0;
+            }
+            $db->update(array('id' => $data['id']), $update);
+        }
+    }
+    
     # 获取所有分类信息
     public function getAll($data, $type = 'content')
     {

+ 28 - 37
src/resource/content/lib/Info.php

@@ -2,20 +2,6 @@
 use Dever;
 class Info
 {
-    public function update($db, $data)
-    {
-        if ($data['cate']) {
-            $data['cate'] = explode(',', $data['cate']);
-            $update['cate_parent_id'] = $data['cate'][0];
-            if (isset($data['cate'][1])) {
-                $update['cate_child_id'] = $data['cate'][1];
-            } else {
-                $update['cate_child_id'] = 0;
-            }
-            $db->update(array('id' => $data['id']), $update);
-        }
-    }
-
     public function getList($member, $cate = false, $id = false, $num = 10)
     {
         $where = array('status' => 1);
@@ -70,33 +56,38 @@ class Info
         if (isset($info['content'])) {
             $info['button'] = '下载';
             if ($member['id'] && $member['id'] > 0) {
-                $info['price_vip'] = array('name' => '会员', 'status' => 2, 'data' => array());
-                $price = Dever::db('price', 'content')->select(array('type' => 1, 'info_id' => $info['id']));
-                if ($price) {
-                    foreach ($price as &$v) {
-                        $vip = Dever::db('vip', 'place')->find($v['type_id']);
-                        if ($vip) {
-                            $v['name'] = $vip['name'];
-                            $v['price_text'] = $this->getPrice($v['price'], $member['score']);
-                            $info['price_vip']['status'] = 1;
-                            $info['price_vip']['data'][] = $v;
-                        }
+                $collect = Dever::db('collect', 'content')->find(array('info_id' => $info['id'], 'uid' => $member['id']));
+                if ($collect && $collect['status'] == 1) {
+                    $info['collect'] = 1;
+                } else {
+                    $info['collect'] = 2;
+                }
+            }
+            $info['price_vip'] = array('name' => '会员', 'status' => 2, 'data' => array());
+            $price = Dever::db('price', 'content')->select(array('type' => 1, 'info_id' => $info['id']));
+            if ($price) {
+                foreach ($price as &$v) {
+                    $vip = Dever::db('vip', 'place')->find($v['type_id']);
+                    if ($vip) {
+                        $v['name'] = $vip['name'];
+                        $v['price_text'] = $this->getPrice($v['price'], $member['score']);
+                        $info['price_vip']['status'] = 1;
+                        $info['price_vip']['data'][] = $v;
                     }
                 }
-                $info['price_agent'] = array('name' => '代理', 'status' => 2, 'data' => array());
-                $price = Dever::db('price', 'content')->select(array('type' => 2, 'info_id' => $info['id']));
-                if ($price) {
-                    foreach ($price as &$v) {
-                        $vip = Dever::db('agent', 'place')->find($v['type_id']);
-                        if ($vip) {
-                            $v['name'] = $vip['name'];
-                            $v['price_text'] = $this->getPrice($v['price'], $member['score']);
-                            $info['price_agent']['status'] = 1;
-                            $info['price_agent']['data'][] = $v;
-                        }
+            }
+            $info['price_agent'] = array('name' => '代理', 'status' => 2, 'data' => array());
+            $price = Dever::db('price', 'content')->select(array('type' => 2, 'info_id' => $info['id']));
+            if ($price) {
+                foreach ($price as &$v) {
+                    $vip = Dever::db('agent', 'place')->find($v['type_id']);
+                    if ($vip) {
+                        $v['name'] = $vip['name'];
+                        $v['price_text'] = $this->getPrice($v['price'], $member['score']);
+                        $info['price_agent']['status'] = 1;
+                        $info['price_agent']['data'][] = $v;
                     }
                 }
-                
             }
             $info['content'] = htmlspecialchars_decode($info['content']);
         }

+ 0 - 12
src/resource/content/lib/Review.php

@@ -1,12 +0,0 @@
-<?php namespace Content\Lib;
-use Dever;
-class Review
-{
-    # 获取列表
-    public function getList($info_id)
-    {
-        $where['info_id'] = $info_id;
-        $data = Dever::db('review', 'content')->select($where);
-        return $data;
-    }
-}

+ 20 - 85
src/resource/content/lib/Value.php

@@ -1,15 +1,16 @@
 <?php namespace Content\Lib;
 use Dever;
+use Dever\Helper\Secure;
 class Value
 {
-    public function getInfo($member)
+    public function getInfo($member, $id = false)
     {
         $id = Dever::input('id');
         $where = array('status' => 1);
         $where['id'] = $id;
         $info = Dever::db('info', 'content')->find($where);
         if (!$info) {
-            Dever::alert('内容不存在');
+            Dever::error('内容不存在');
         }
 
         $password = Dever::input('password');
@@ -24,7 +25,21 @@ class Value
         }
         
         if ($result['status'] == 1) {
-            $result['value'] = Dever::db('value', 'content')->select(array('info_id' => $info['id']));
+            if ($id) {
+                $result['value'] = Dever::db('value', 'content')->find(array('info_id' => $info['id'], 'id' => $id));
+            } else {
+                $result['value'] = Dever::db('value', 'content')->select(array('info_id' => $info['id']));
+                if ($result['value']) {
+                    $param['p'] = Dever::input('p');
+                    $param['t'] = Dever::input('t');
+                    foreach ($result['value'] as &$v) {
+                        if ($v['file']) {
+                            $param['g'] = Secure::encode($v['id']);
+                            $v['file'] = Dever::url('api/value.down', $param);
+                        }
+                    }
+                }
+            }
         }
         return $result;
     }
@@ -36,45 +51,12 @@ class Value
         $result['id'] = $info['id'];
         $result['name'] = $info['name'];
         $result['status'] = 2;
-        $order = Dever::db('order', 'content')->find(array('info_id' => $info['id'], 'uid' => $member['id'], 'status' => 2));
+        $order = Dever::load('order', 'place')->getInfoByType(1, $info['id'], $member['id'], 5);
         if ($order) {
             $result['status'] = 1;
         } else {
             if ($info['price'] > 0) {
-                if ($member['vip_id'] > 0) {
-                    $vip_price = 0;
-                    $price = Dever::db('price', 'content')->select(array('type' => 1, 'info_id' => $info['id']));
-                    if ($price) {
-                        foreach ($price as &$v) {
-                            if ($v['type_id'] == $member['vip_id']) {
-                                $vip_price = $v['price'];
-                                break;
-                            } elseif ($v['type_id'] <= 0) {
-                                $vip_price = $v['price'];
-                            }
-                        }
-                        if ($vip_price < $info['price']) {
-                            $info['price'] = $vip_price;
-                        }
-                    }
-                }
-                if ($member['agent_id'] > 0) {
-                    $agent_price = 0;
-                    $price = Dever::db('price', 'content')->select(array('type' => 2, 'info_id' => $info['id']));
-                    if ($price) {
-                        foreach ($price as &$v) {
-                            if ($v['type_id'] == $member['agent_id']) {
-                                $agent_price = $v['price'];
-                                break;
-                            } elseif ($v['type_id'] <= 0) {
-                                $agent_price = $v['price'];
-                            }
-                        }
-                        if ($agent_price < $info['price']) {
-                            $info['price'] = $agent_price;
-                        }
-                    }
-                }
+                $info['price'] = Dever::load('util', 'place')->getPrice($info['price'], $member, $info['id'], 'price', 'content', 1);
             }
 
             if ($info['price'] <= 0) {
@@ -92,51 +74,4 @@ class Value
         }
         return $result;
     }
-
-    # 下单
-    public function getPay($member, $info, $account = 'wechat', $env = 3)
-    {
-        # 支付账户
-        $account = 'pay_' . $account;
-        # 下单
-        $order = array
-        (
-            'uid' => $member['id'],
-            'username' => $member['name'],
-            'openid' => $member['openid'] ?? '',
-            'order_num' => Dever::load('util', 'api')->createNumber('C', 'content/order'),
-            'cash' => ($info['price']/$member['score_per'])*100,#每个人的积分换算公式可能不一样
-            'name' => $info['name'],
-            'time_expire' => time() + 3600,
-        );
-        # 设置支付成功的回调信息,多个参数用|隔开
-        $param['notify'] = 'content/value.paySuccess|' . Dever::input('p') . '|' . $order['order_num'];
-        $data = Dever::load('account', 'api')->run($account, 'order', $order, $env);
-        if ($data) {
-            $order['info_id'] = $info['id'];
-            $order['account_id'] = $data['account_id'];
-            $order['api_id'] = $data['api_id'];
-            $data['order_id'] = Dever::db('order', 'content')->insert($order);
-        }
-        return $data;
-    }
-
-    # 支付成功
-    public function paySuccess($place, $order_num, $status, $body)
-    {
-        Dever::input('authorization', 'is_string', '入口码', $place);
-        $order = Dever::db('order', 'content')->find(array('order_num' => $order_num));
-        if ($order && $order['status'] == 1) {
-            if ($status == 1) {
-                $update['status'] = 2;
-            } else {
-                $update['status'] = 3;
-            }
-            $update['pdate'] = time();
-            $state = Dever::db('order', 'content')->update($order['id'], $update);
-            if (!$state && $order['project_id']) {
-                return '订单更新失败';
-            }
-        }
-    }
 }

+ 36 - 0
src/resource/content/manage/agent_price.php

@@ -0,0 +1,36 @@
+<?php
+return array
+(
+    'update' => array
+    (
+        'field'    => array
+        (
+            'agent_id' => array
+            (
+                'placeholder' => '不选则为所有代理',
+                'tips' => '选择代理,可以多选<br />不选则为所有代理',
+                'type' => 'select',
+                'clearable' => true,
+                'multiple' => true,
+            ),
+            'price' => array
+            (
+                'tips' => '价格设置为0,当前选择的代理免费<br />为空则使用默认代理折扣计算代理购买价格',
+            ),
+            'fee' => array
+            (
+                'tips' => '资源价格*佣金比例%=代理佣金<br />为空则使用默认代理佣金比例',
+                'placeholder' => '资源价格*佣金比例%=代理佣金',
+            ),
+            'status' => array
+            (
+                'width' => '40',
+                'type' => 'switch',
+                'show'  => '{status}',
+                'active_value' => 1,
+                'inactive_value' => 2,
+                'tips' => '勾选后,仅限当前选择的代理可以下载',
+            ),
+        ),
+    ),
+);

+ 22 - 7
src/resource/content/manage/info.php

@@ -59,9 +59,9 @@ return array
     (
         'tab' => array
         (
-            '基本信息' => 'name,cate,content',
+            '基本信息' => 'name,cate,pic,info,content',
             '附件信息' => 'content/value',
-            '价格设置' => 'price,password,content/price',
+            '价格设置' => 'price,password,content/vip_price,content/agent_price',
         ),
         //'desc' => '原创声明:',
         'field'    => array
@@ -76,6 +76,15 @@ return array
                 'type' => 'cascader',
                 'option'    => 'Dever::call("content/cate.getList", array("content"))',
             ),
+            'pic' => array
+            (
+                'type' => 'upload',
+                'upload' => '1',
+                'yun' => true,
+                'multiple' => false,
+                'limit' => 1,
+                'style' => 'pic',
+            ),
             'info' => array
             (
                 'type' => 'textarea',
@@ -99,19 +108,25 @@ return array
             ),
             'price' => array
             (
-                'desc' => '下载附件的价格',
+                'desc' => '',
             ),
             'password' => array
             (
                 'desc' => '输入密码后,可以免费下载附件',
             ),
-            'content/price' => array
+            'content/vip_price' => array
+            (
+                'name' => '会员价格',
+                'where'  => array('info_id' => 'id'),
+                'desc' => '可以按照会员等级设置不同的价格',
+            ),
+            'content/agent_price' => array
             (
-                'name' => '会员设置',
+                'name' => '代理价格',
                 'where'  => array('info_id' => 'id'),
-                'desc' => '可以按照会员和代理等级设置,设置专享后,仅该等级的会员或代理可以下载',
+                'desc' => '可以按照代理等级设置不同的价格',
             ),
         ),
-        'end' => 'content/info.update',
+        'end' => 'content/cate.update',
     ),
 );

+ 9 - 10
src/resource/content/manage/price.php → src/resource/content/manage/vip_price.php

@@ -5,20 +5,18 @@ return array
     (
         'field'    => array
         (
-            'type' => array
+            'vip_id' => array
             (
-                'type' => 'radio',
-                'remote' => 'content/manage.getPrice',
-                # 无需默认值
-                'remote_default' => false,
-            ),
-            'type_id' => array
-            (
-                'name' => '选项-不选择则为所有',
+                'placeholder' => '不选则为所有会员',
+                'tips' => '选择会员,可以多选<br />不选则为所有会员',
                 'type' => 'select',
+                'clearable' => true,
                 'multiple' => true,
             ),
-            'price',
+            'price' => array
+            (
+                'tips' => '价格设置为0,当前选择的会员免费',
+            ),
             'status' => array
             (
                 'width' => '40',
@@ -26,6 +24,7 @@ return array
                 'show'  => '{status}',
                 'active_value' => 1,
                 'inactive_value' => 2,
+                'tips' => '勾选后,仅限当前选择的会员可以下载',
             ),
         ),
     ),

+ 11 - 17
src/resource/content/table/price.php → src/resource/content/table/agent_price.php

@@ -1,7 +1,7 @@
 <?php
 return array
 (
-    'name' => '内容价格表',
+    'name' => '内容代理价格表',
     'partition' => 'Dever::call("manage/common.system")',
     'struct' => array
     (
@@ -11,29 +11,23 @@ return array
             'type'      => 'int(11)',
         ),
 
-        'type' => array
+        'agent_id' => array
         (
-            'name'      => '类型',
-            'type'      => 'tinyint(1)',
-            'default'   => 1,
-            'value'     => array
-            (
-                1 => '会员',
-                2 => '代理',
-            ),
+            'name'      => '代理',
+            'type'      => 'varchar(50)',
+            'value'     => 'place/agent',
         ),
 
-        'type_id' => array
+        'price' => array
         (
-            'name'      => '类型id',
-            'type'      => 'int(11)',
+            'name'      => '价格',
+            'type'      => 'varchar(11)',
         ),
 
-        'price' => array
+        'fee' => array
         (
-            'name'      => '价格',
-            'type'      => 'decimal(11,2)',
-            'default'   => '0',
+            'name'      => '佣金比例',
+            'type'      => 'varchar(20)',
         ),
         
         'status' => array

+ 0 - 32
src/resource/content/table/collect.php

@@ -1,32 +0,0 @@
-<?php
-return array
-(
-    'name' => '内容收藏表',
-    'partition' => 'Dever::call("manage/common.system")',
-    'struct' => array
-    (
-        'info_id'        => array
-        (
-            'type'      => 'int(11)',
-            'name'      => '内容',
-        ),
-
-        'uid'       => array
-        (
-            'type'      => 'int(11)',
-            'name'      => '用户',
-        ),
-
-        'status'        => array
-        (
-            'type'      => 'tinyint(1)',
-            'name'      => '状态',
-            'default'   => '1',
-            'value'         => array
-            (
-                1 => '收藏',
-                2 => '取消收藏',
-            ),
-        ),
-    ),
-);

+ 6 - 0
src/resource/content/table/down.php

@@ -11,6 +11,12 @@ return array
             'name'      => '内容',
         ),
 
+        'info_value_id'        => array
+        (
+            'type'      => 'int(11)',
+            'name'      => '附件',
+        ),
+
         'uid'       => array
         (
             'type'      => 'int(11)',

+ 3 - 3
src/resource/content/table/info.php

@@ -21,13 +21,13 @@ return array
         'pic' => array
         (
             'name'      => '封面',
-            'type'      => 'varchar(500)',
+            'type'      => 'varchar(150)',
         ),
         
         'cate' => array
         (
             'name'      => '分类',
-            'type'      => 'varchar(800)',
+            'type'      => 'varchar(50)',
         ),
 
         'cate_parent_id' => array
@@ -58,7 +58,7 @@ return array
         'password' => array
         (
             'name'      => '密码',
-            'type'      => 'varchar(500)',
+            'type'      => 'varchar(32)',
         ),
 
         'sort' => array

+ 0 - 87
src/resource/content/table/order.php

@@ -1,87 +0,0 @@
-<?php
-return array
-(
-    'name' => '内容支付订单表',
-    'partition' => 'Dever::call("manage/common.system")',
-    'struct' => array
-    (
-        'account_id'        => array
-        (
-            'type'      => 'int(11)',
-            'name'      => '账户',
-        ),
-
-        'api_id'       => array
-        (
-            'type'      => 'int(11)',
-            'name'      => '接口',
-        ),
-
-        'info_id'        => array
-        (
-            'type'      => 'int(11)',
-            'name'      => '内容',
-        ),
-
-        'uid'       => array
-        (
-            'type'      => 'int(11)',
-            'name'      => '用户',
-        ),
-
-        'username'      => array
-        (
-            'type'      => 'varchar(200)',
-            'name'      => '用户名称',
-        ),
-
-        'openid'        => array
-        (
-            'type'      => 'varchar(200)',
-            'name'      => '第三方用户ID',
-        ),
-
-        'name'      => array
-        (
-            'type'      => 'varchar(800)',
-            'name'      => '订单名称',
-        ),
-
-        'order_num'        => array
-        (
-            'type'      => 'varchar(600)',
-            'name'      => '订单号',
-        ),
-
-        'cash'      => array
-        (
-            'type'      => 'decimal(11,2)',
-            'name'      => '订单金额',
-        ),
-
-        'time_expire'        => array
-        (
-            'type'      => 'int(11)',
-            'name'      => '过期时间',
-        ),
-
-        'status'        => array
-        (
-            'type'      => 'tinyint(1)',
-            'name'      => '订单状态',
-            'default'   => '1',
-            'value'         => array
-            (
-                1 => '待支付',
-                2 => '已支付',
-                3 => '支付失败',
-            ),
-        ),
-
-        'pdate'       => array
-        (
-            'type'      => 'int(11)',
-            'name'      => '付款时间',
-        ),
-    ),
-);

+ 0 - 46
src/resource/content/table/review.php

@@ -1,46 +0,0 @@
-<?php
-return array
-(
-    'name' => '内容回复表',
-    'partition' => 'Dever::call("manage/common.system")',
-    'order' => 'sort asc',
-    'struct' => array
-    (
-        'info_id' => array
-        (
-            'name'      => '内容ID',
-            'type'      => 'int(11)',
-        ),
-
-        'mid' => array
-        (
-            'name'      => '成员ID',
-            'type'      => 'int(11)',
-        ),
-
-        'content'       => array
-        (
-            'name'      => '内容',
-            'type'      => 'text(255)',
-        ),
-
-        'sort' => array
-        (
-            'name'      => '排序',
-            'type'      => 'int(11)',
-            'default'   => '1',
-        ),
-
-        'status' => array
-        (
-            'name'      => '状态',
-            'type'      => 'tinyint(1)',
-            'default'   => 1,
-            'value'     => array
-            (
-                1 => '可见',
-                2 => '不可见',
-            ),
-        ),
-    ),
-);

+ 3 - 3
src/resource/content/table/value.php

@@ -15,19 +15,19 @@ return array
         'name' => array
         (
             'name'      => '名称',
-            'type'      => 'varchar(200)',
+            'type'      => 'varchar(32)',
         ),
 
         'file' => array
         (
             'name'      => '文件',
-            'type'      => 'varchar(2000)',
+            'type'      => 'varchar(300)',
         ),
 
         'content' => array
         (
             'name'      => '描述',
-            'type'      => 'varchar(8000)',
+            'type'      => 'varchar(800)',
         ),
 
         'sort' => array

+ 39 - 0
src/resource/content/table/vip_price.php

@@ -0,0 +1,39 @@
+<?php
+return array
+(
+    'name' => '内容会员价格表',
+    'partition' => 'Dever::call("manage/common.system")',
+    'struct' => array
+    (
+        'info_id' => array
+        (
+            'name'      => '内容ID',
+            'type'      => 'int(11)',
+        ),
+
+        'vip_id' => array
+        (
+            'name'      => '会员',
+            'type'      => 'varchar(50)',
+            'value'     => 'place/vip',
+        ),
+
+        'price' => array
+        (
+            'name'      => '价格',
+            'type'      => 'varchar(11)',
+        ),
+        
+        'status' => array
+        (
+            'name'      => '专享状态',
+            'type'      => 'tinyint(1)',
+            'default'   => 2,
+            'value'     => array
+            (
+                1 => '专享',
+                2 => '非专享',
+            ),
+        ),
+    ),
+);

+ 1 - 1
src/resource/func/table/channel.php

@@ -22,7 +22,7 @@ return array
         'config'       => array
         (
             'name'      => '配置',
-            'type'      => 'varchar(3000)',
+            'type'      => 'varchar(30)',
         ),
 
         'sort' => array

+ 3 - 3
src/resource/func/table/info.php

@@ -21,7 +21,7 @@ return array
         'pic' => array
         (
             'name'      => '封面',
-            'type'      => 'varchar(500)',
+            'type'      => 'varchar(150)',
         ),
 
         'price' => array
@@ -34,7 +34,7 @@ return array
         'cate' => array
         (
             'name'      => '分类',
-            'type'      => 'varchar(800)',
+            'type'      => 'varchar(50)',
         ),
 
         'cate_parent_id' => array
@@ -77,7 +77,7 @@ return array
         'link'       => array
         (
             'name'      => '链接',
-            'type'      => 'varchar(3000)',
+            'type'      => 'varchar(1000)',
         ),
 
         'content'       => array

+ 30 - 0
src/resource/goods/api/Data.php

@@ -0,0 +1,30 @@
+<?php namespace Goods\Api;
+use Dever;
+use Place\Lib\Core;
+class Data extends Core
+{
+    # 首页
+    public function home()
+    {
+        $data['place'] = $this->place;
+        $data['member'] = $this->member;
+        $data = Dever::load('cate', 'content')->getAll($data, 'goods');
+        $data['list'] = Dever::load('info', 'goods')->getList($this->member, $data['cate_id']);
+        return $data;
+    }
+
+    # 详情
+    public function view()
+    {
+        $data['place'] = $this->place;
+        $data['member'] = $this->member;
+        $data['info'] = Dever::load('info', 'content')->getOne($this->member);
+        # 分类下其他内容
+        $data['cate'] = Dever::load('info', 'content')->getList($this->member, $data['info']['cdate'], $data['info']['id'], 6);
+        # 最新内容
+        $data['new'] = Dever::load('info', 'content')->getList($this->member, false, $data['info']['id'], 6);
+        # 获取评论
+        $data['review'] = Dever::load('review', 'content')->getList($data['info']['id']);
+        return $data;
+    }
+}

+ 93 - 0
src/resource/goods/lib/Info.php

@@ -0,0 +1,93 @@
+<?php namespace Goods\Lib;
+use Dever;
+class Info
+{
+    public function getList($member, $cate = false, $id = false, $num = 10)
+    {
+        $where = array('status' => 1);
+        if ($cate) {
+            $cate = explode(',', $cate);
+            $where['cate_parent_id'] = $cate[0];
+            if (isset($cate[1])) {
+                $where['cate_child_id'] = $cate[0];
+            }
+        }
+        $name = Dever::input('search');
+        if ($name) {
+            $where['name'] = array('like', $name);
+        }
+        $set['col'] = 'id,name,info,cdate,pic,spec_type';
+        if ($id) {
+            $set['limit'] = '0,6';
+            $where['id'] = array('!=', $id);
+        } else {
+            $set['num'] = $num;
+        }
+        $info = Dever::db('info', 'goods')->select($where, $set);
+        $result = array();
+        foreach ($info as $k => $v) {
+            $v = $this->getInfo($v, $member);
+            $result[] = $v;
+        }
+        return $result;
+    }
+
+    public function getOne($member)
+    {
+        $id = Dever::input('id');
+        $where = array('status' => 1);
+        $where['id'] = $id;
+        $info = Dever::db('info', 'goods')->find($where);
+        if (!$info) {
+            Dever::error('商品不存在');
+        }
+        $info = $this->getInfo($info, $member);
+        return $info;
+    }
+
+    private function getInfo($info, $member)
+    {
+        $info['cdate_str'] = date('Y-m-d H:i:s', $info['cdate']);
+        if (isset($info['content'])) {
+            $info['button'] = '下载';
+            if ($member['id'] && $member['id'] > 0) {
+                $collect = Dever::db('collect', 'content')->find(array('info_id' => $info['id'], 'uid' => $member['id']));
+                if ($collect && $collect['status'] == 1) {
+                    $info['collect'] = 1;
+                } else {
+                    $info['collect'] = 2;
+                }
+            }
+            $info['price_vip'] = array('name' => '会员', 'status' => 2, 'data' => array());
+            $price = Dever::db('price', 'content')->select(array('type' => 1, 'info_id' => $info['id']));
+            if ($price) {
+                foreach ($price as &$v) {
+                    $vip = Dever::db('vip', 'place')->find($v['type_id']);
+                    if ($vip) {
+                        $v['name'] = $vip['name'];
+                        $v['price_text'] = $this->getPrice($v['price'], $member['score']);
+                        $info['price_vip']['status'] = 1;
+                        $info['price_vip']['data'][] = $v;
+                    }
+                }
+            }
+            $info['price_agent'] = array('name' => '代理', 'status' => 2, 'data' => array());
+            $price = Dever::db('price', 'content')->select(array('type' => 2, 'info_id' => $info['id']));
+            if ($price) {
+                foreach ($price as &$v) {
+                    $vip = Dever::db('agent', 'place')->find($v['type_id']);
+                    if ($vip) {
+                        $v['name'] = $vip['name'];
+                        $v['price_text'] = $this->getPrice($v['price'], $member['score']);
+                        $info['price_agent']['status'] = 1;
+                        $info['price_agent']['data'][] = $v;
+                    }
+                }
+            }
+            $info['content'] = htmlspecialchars_decode($info['content']);
+        }
+
+        $info['price'] = Dever::load('sku', 'api')->getPrice(array('info_id' => $info['id']), $info['spec_type'], $member['score'], 'goods');
+        return $info;
+    }
+}

+ 0 - 37
src/resource/goods/lib/Spec.php

@@ -1,37 +0,0 @@
-<?php namespace Goods\Lib;
-use Dever;
-class Spec
-{
-    # 获取规格数据
-    public function manage($info_id)
-    {
-        $result = array();
-        if ($info_id) {
-            $result = Dever::db('spec', 'goods')->select(array('info_id' => $info_id));
-            if ($result) {
-                foreach ($result as $k => $v) {
-                    $result[$k]['type'] = 'show';
-                    $result[$k]['width'] = '100';
-                    $result[$k]['show'] = true;
-                    $result[$k]['fixed'] = true;
-                    $result[$k]['key'] = $v['name'];
-                    $value = Dever::db('spec_value', 'goods')->select(array('info_id' => $info_id, 'spec_id' => $v['id']));
-                    if ($value) {
-                        foreach ($value as $k1 => $v1) {
-                            $value[$k1]['parent'] = $result[$k]['key'];
-                            $value[$k1]['name'] = $v1['value'];
-                            $value[$k1]['key'] = $v1['value'];
-                            if ($v1['is_checked'] == 1) {
-                                $value[$k1]['checked'] = true;
-                            } else {
-                                $value[$k1]['checked'] = false;
-                            }
-                        }
-                    }
-                    $result[$k]['value'] = $value;
-                }
-            }
-        }
-        return $result;
-    }
-}

+ 35 - 10
src/resource/goods/manage/info.php

@@ -57,22 +57,23 @@ return array
     ),
     'update' => array
     (
+        'end' => 'content/cate.update',
         'control' => array
         (
-            'goods/info_sku' => array
+            'goods/sku' => array
             (
-                'spec_type' => 1,
+                'spec_type' => 2,
             ),
 
-            'goods/info_sku#' => array
+            'goods/sku#' => array
             (
-                'spec_type' => 2,
+                'spec_type' => 3,
             ),
         ),
         'tab' => array
         (
-            '基本信息' => 'name,cate,pic,content',
-            '规格设置' => 'spec_type, goods/sku, goods/sku#',
+            '基本信息' => 'name,cate,pic,info,content',
+            '规格设置' => 'spec_type,goods/sku,goods/sku#',
         ),
         //'desc' => '原创声明:',
         'field'    => array
@@ -87,12 +88,34 @@ return array
                 'type' => 'cascader',
                 'option'    => 'Dever::call("content/cate.getList", array("goods"))',
             ),
+            'pic' => array
+            (
+                'type' => 'upload',
+                'upload' => '1',
+                'multiple' => true,
+                'style' => 'pic',
+            ),
+            'info' => array
+            (
+                'type' => 'textarea',
+                //'rows' => 4,
+                'autosize' => array('minRows' => 4),
+            ),
+            'content' => array
+            (
+                'type' => 'editor',
+                'editorMenu' => array
+                (
+                    'uploadImage' => 1,
+                    'uploadVideo' => 3,
+                ),
+            ),
             'spec_type' => array
             (
                 'type' => 'radio',
                 'control' => true,
             ),
-            'goods/info_sku' => array
+            'goods/sku' => array
             (
                 'name' => '单规格设置',
                 'where'  => array('info_id' => 'id', 'key' => '-1'),
@@ -102,15 +125,16 @@ return array
                     # 默认值
                     array
                     (
+                        'key' => '-1',
                         'code' => '',
                         'm_price' => '',
                         'price' => '',
-                        'num' => '',
                     ),
                 ),
+                'desc' => '如需设置商品库存,请到“商品库存”中设置,不设置库存则商品无库存',
             ),
 
-            'goods/info_sku#' => array
+            'goods/sku#' => array
             (
                 'name' => '多规格设置',
                 'where' => array('info_id' => 'id', 'key' => array('!=', '-1')),
@@ -120,7 +144,8 @@ return array
                 # 设置规格表关联字段
                 'spec_field' => 'info_id',
                 # 获取规格数据的接口
-                'spec_data' => 'goods/spec.manage',
+                'spec_data' => 'api/spec.manage',
+                'desc' => '如需设置商品库存,请到“商品库存”中设置,不设置库存则商品无库存',
             ),
         ),
     ),

+ 35 - 0
src/resource/goods/manage/sku.php

@@ -0,0 +1,35 @@
+<?php
+return array
+(
+    'update' => array
+    (
+        'field'    => array
+        (
+            'key' => array
+            (
+                'type' => 'hidden',
+                'remote' => 'api/manage.keyToField?project=goods',
+            ),
+            'price' => array
+            (
+                'type' => 'text',
+                'rules' => true,
+                'tips' => '商品销售价,这里录入的是商品基础销售价格,如后续有活动和优惠,都将在此价格基础上做相应的折扣优惠',
+            ),
+            'm_price' => array
+            (
+                'type' => 'text',
+                'rules' => true,
+                'tips' => '指商品的专柜价、吊牌价、正品零售价、厂商指导价或该商品的曾经展示过的销售价等',
+            ),
+            'code' => array
+            (
+                'type' => 'text',
+                'tips' => '1.方便管理商品,可用于库存管理,多渠道销售分析等;<br />
+2.可以输入erp编码,库存编号,标准条码等;<br />
+3.对于多规格的商品,可以设置每个规格(SKU)的编码;<br />
+4.为空则会生成一个商品编码。',
+            ),
+        ),
+    ),
+);

+ 10 - 3
src/resource/goods/table/info.php

@@ -12,6 +12,12 @@ return array
             'type'      => 'varchar(32)',
         ),
 
+        'info' => array
+        (
+            'name'      => '简介',
+            'type'      => 'varchar(800)',
+        ),
+
         'pic' => array
         (
             'name'      => '主图',
@@ -21,7 +27,7 @@ return array
         'cate' => array
         (
             'name'      => '分类',
-            'type'      => 'varchar(800)',
+            'type'      => 'varchar(50)',
         ),
 
         'cate_parent_id' => array
@@ -56,8 +62,9 @@ return array
             'default'   => 1,
             'value'     => array
             (
-                1 => '单规格',
-                2 => '多规格',
+                1 => '免费',
+                2 => '单规格',
+                3 => '多规格',
             ),
         ),
         

+ 8 - 2
src/resource/goods/table/sku.php

@@ -14,13 +14,19 @@ return array
         'key' => array
         (
             'name'      => '规格ID',
-            'type'      => 'varchar(500)',
+            'type'      => 'varchar(50)',
+        ),
+
+        'pic' => array
+        (
+            'name'      => '图片',
+            'type'      => 'varchar(150)',
         ),
 
         'code' => array
         (
             'name'      => '商品编码',
-            'type'      => 'varchar(100)',
+            'type'      => 'varchar(50)',
         ),
 
         'm_price' => array

+ 1 - 1
src/resource/goods/table/spec.php

@@ -14,7 +14,7 @@ return array
         'name' => array
         (
             'name'      => '规格名称',
-            'type'      => 'varchar(200)',
+            'type'      => 'varchar(32)',
         ),
 
         'sort' => array

+ 1 - 1
src/resource/goods/table/spec_value.php

@@ -19,7 +19,7 @@ return array
         'value' => array
         (
             'name'      => '规格值',
-            'type'      => 'varchar(500)',
+            'type'      => 'varchar(50)',
         ),
         'is_checked' => array
         (

+ 8 - 0
src/sector/manage/core.php

@@ -11,6 +11,14 @@ return array
             'sort'      => '5',
         ),
 
+        'money' => array
+        (
+            'parent'    => 'platform',
+            'name'      => '货币管理',
+            'icon'      => 'money-cny-box-line',
+            'sort'      => '6',
+        ),
+
         'sector_manage' => array
         (
             'parent'    => 'sector',

+ 38 - 0
src/sector/manage/money.php

@@ -0,0 +1,38 @@
+<?php
+return array
+(
+    'list' => array
+    (
+        'field'      => array
+        (
+            'id',
+            'name',
+            'code',
+            'sign',
+            'cdate',
+        ),
+        'button' => array
+        (
+            '新增' => 'fastadd',
+        ),
+        'data_button' => array
+        (
+            '编辑' => 'fastedit',
+        ),
+        'search' => array
+        (
+            'name',
+            'code',
+            'sign',
+        ),
+    ),
+    'update' => array
+    (
+        'field'    => array
+        (
+            'name',
+            'code',
+            'sign',
+        ),
+    ),
+);

+ 44 - 0
src/sector/table/money.php

@@ -0,0 +1,44 @@
+<?php
+return array
+(
+    'name' => '货币表',
+    'struct' => array
+    (
+        'name' => array
+        (
+            'name'      => '货币名称',
+            'type'      => 'varchar(50)',
+        ),
+        'code' => array
+        (
+            'name'      => '货币代码',
+            'type'      => 'varchar(50)',
+        ),
+        'sign' => array
+        (
+            'name'      => '货币符号',
+            'type'      => 'varchar(11)',
+        ),
+        'status' => array
+        (
+            'name'      => '状态',
+            'type'      => 'tinyint(1)',
+            'default'   => 1,
+            'value'     => array
+            (
+                1 => '正常',
+                2 => '封禁',
+            ),
+        ),
+    ),
+
+    'default' => array
+    (
+        'field' => 'name,code,sign,cdate',
+        'value' => array
+        (
+            '"人民币","CNY","¥",' . DEVER_TIME,
+        ),
+        'num' => 1,
+    ),
+);

Some files were not shown because too many files changed in this diff