From abc7edc3c8ad59ff213c85413d0d6a10d7a0b6f7 Mon Sep 17 00:00:00 2001
From: quanwei <419654421@qq.com>
Date: Wed, 17 Dec 2025 18:03:09 +0800
Subject: [PATCH] 1.	发布供需消耗连盟币,连盟币数量在后台独立设置 2.	小程序供需个人中心可自由切换身份 3.	增加私信系统 4.	增加评论系统,用户可在发布者详情页进行评论操作,评论获得的连盟币可在后台设置 5.	增加发布者的等级,以好评个数为条件进行升级,小程序端会显示该等级的图标,如没有等级则不会显示图标 6.	增加设置消耗连盟币可以解锁、查看发布的信息,费用可在后台设置 7.	小程序供需大厅界面优化,以及增加了推荐栏目,该栏目按发布的分类相似进行匹配,比如A用户发布了 互联网 分类的需求,则会优先推荐匹配互联网分类的供应需求给他。

---
 supplier_vue/src/views/plus/release/demand/user/dialog/Edit.vue     |   93 
 supplier_vue/src/views/plus/release/cash/dialog/Edit.vue            |   94 
 admin/app/common/model/plus/release/Project.php                     |   10 
 supplier_vue/src/views/plus/release/releasecategory/Add.vue         |  103 
 supplier_vue/src/views/plus/release/demand/apply/dialog/Edit.vue    |   88 
 shop_vue/src/views/supplier/supplier/add.vue                        |   11 
 admin/app/api/model/plus/release/Chat.php                           |   86 
 admin/app/supplier/controller/plus/release/Grade.php                |   66 
 shop_vue/src/views/plus/release/supply/user/User.vue                |   13 
 supplier_vue/src/views/plus/release/supply/apply/Apply.vue          |  168 +
 admin/app/shop/model/plus/release/Grade.php                         |   52 
 supplier_vue/src/views/plus/release/grade/part/Edit.vue             |  131 
 supplier_vue/src/views/plus/release/tag/Edit.vue                    |   85 
 admin/app/supplier/controller/plus/release/Evaluate.php             |   40 
 shop_vue/src/views/plus/release/grade/part/Edit.vue                 |  131 
 admin/app/api/model/plus/release/Project.php                        |   31 
 admin/app/shop/controller/plus/release/DemandUser.php               |    5 
 admin/app/supplier/controller/plus/release/DemandApply.php          |   43 
 admin/app/supplier/controller/plus/release/ReleaseCategory.php      |   68 
 mobile/pages.json                                                   |   21 
 admin/app/common/model/plus/release/Evaluate.php                    |   59 
 admin/app/common/model/plus/release/Grade.php                       |  112 
 admin/app/api/controller/plus/release/SupplyIndex.php               |   29 
 admin/app/common/model/plus/release/ChatRelation.php                |   44 
 mobile/pages3/release/chat/chat_list.vue                            |  155 
 shop_vue/src/views/supplier/supplier/edit.vue                       |    9 
 supplier_vue/src/views/plus/release/demandproject/dialog/Edit.vue   |   92 
 shop_vue/src/views/plus/release/supply/user/dialog/Edit.vue         |   13 
 admin/app/shop/controller/plus/release/Grade.php                    |   61 
 admin/app/api/controller/plus/release/Project.php                   |   12 
 mobile/pages3/release/project/popup/evaluate.vue                    |  232 +
 admin/app/api/model/plus/release/SupplyUser.php                     |   32 
 supplier_vue/src/views/plus/release/evaluate/list.vue               |  174 +
 admin/app/common/model/plus/agent/Referee.php                       |    2 
 mobile/pages3/release/chat/chat.vue                                 |  585 +++
 supplier_vue/src/views/plus/bonus/setting/part/Basic.vue            |   37 
 shop_vue/src/views/plus/release/demand/user/User.vue                |   13 
 admin/app/supplier/controller/plus/release/Cash.php                 |   85 
 shop_vue/src/api/plus/release.js                                    |   24 
 supplier_vue/src/views/plus/release/index.vue                       |  192 +
 shop_vue/src/views/plus/release/index.vue                           |   24 
 mobile/pages/branch/admin/activity/user.vue                         |    1 
 mobile/pages3/release/supplyproject/edit.vue                        |   11 
 shop_vue/src/views/plus/vip/user/User.vue                           |   16 
 admin/app/common/model/plus/bonus/Setting.php                       |    2 
 admin/app/api/model/plus/release/ChatRelation.php                   |   23 
 admin/app/common/model/plus/release/Chat.php                        |   68 
 supplier_vue/src/views/plus/release/demandproject/index.vue         |  232 +
 supplier_vue/src/views/plus/release/releasecategory/index.vue       |  130 
 admin/app/common/model/plus/release/SupplyUser.php                  |    9 
 admin/app/supplier/controller/plus/release/SupplyUser.php           |   59 
 shop_vue/src/views/plus/bonus/setting/part/Basic.vue                |   37 
 supplier_vue/src/views/plus/release/order/Order.vue                 |  281 +
 shop_vue/src/views/plus/release/demand/user/dialog/Edit.vue         |   12 
 admin/app/common/model/plus/release/DemandUser.php                  |    9 
 admin/app/supplier/controller/plus/release/SupplyApply.php          |   43 
 supplier_vue/src/views/plus/release/demandproject/Edit.vue          |   78 
 admin/app/api/model/plus/release/DemandUser.php                     |   32 
 supplier_vue/src/views/plus/release/tag/index.vue                   |  147 
 shop_vue/src/views/plus/vip/setting/part/Basic.vue                  |   37 
 mobile/pages3/release/project/list.vue                              |   95 
 supplier_vue/src/views/plus/release/releasecategory/Edit.vue        |  106 
 shop_vue/src/views/plus/release/setting/Setting.vue                 |    2 
 supplier_vue/src/views/plus/release/setting/Setting.vue             |   58 
 supplier_vue/src/views/plus/release/grade/part/list.vue             |  189 +
 supplier_vue/src/views/plus/release/grade/index.vue                 |   32 
 admin/app/shop/model/plus/release/SupplyUser.php                    |    2 
 supplier_vue/src/views/plus/release/order/dialog/Edit.vue           |  182 +
 supplier_vue/src/views/plus/release/setting/part/Settlement备份可删.vue |  104 
 supplier_vue/src/views/plus/release/cash/Cash.vue                   |  333 ++
 admin/app/shop/model/plus/release/DemandUser.php                    |    2 
 admin/app/api/model/branch/ActivityUser.php                         |    3 
 supplier_vue/src/views/plus/release/supply/apply/dialog/Edit.vue    |   88 
 supplier_vue/src/views/plus/release/supply/user/dialog/Edit.vue     |   93 
 admin/app/supplier/controller/plus/release/SupplyProject.php        |   53 
 shop_vue/src/views/plus/release/setting/part/Settlement.vue         |   30 
 admin/app/api/service/order/settled/OrderSettledService.php         |    2 
 admin/app/api/model/plus/release/DemandProject.php                  |   22 
 mobile/pages3/release/demandproject/edit.vue                        |   10 
 admin/app/common/model/branch/ActivityUser.php                      |    4 
 mobile/pages3/release/supplyindex/index.vue                         |   91 
 shop_vue/src/views/plus/release/grade/part/Add.vue                  |  136 
 admin/app/api/controller/plus/release/SupplyProject.php             |   16 
 admin/app/api/controller/plus/release/Evaluate.php                  |   55 
 admin/app/api/model/plus/release/SupplyProject.php                  |   21 
 admin/app/api/controller/plus/release/Chat.php                      |   60 
 supplier_vue/src/views/plus/release/supply/user/User.vue            |  214 +
 supplier_vue/src/views/plus/release/demand/user/User.vue            |  214 +
 admin/app/supplier/controller/plus/release/DemandUser.php           |   59 
 mobile/pages3/release/demandproject/release.vue                     |   23 
 supplier_vue/src/views/plus/release/tag/Add.vue                     |   86 
 shop_vue/src/views/plus/release/supplyproject/index.vue             |   14 
 admin/app/common/model/user/User.php                                |    9 
 supplier_vue/src/views/plus/vip/setting/part/Basic.vue              |   68 
 admin/app/shop/controller/plus/release/Evaluate.php                 |   35 
 admin/app/api/model/plus/release/Evaluate.php                       |   98 
 shop_vue/src/views/plus/release/demandproject/index.vue             |   20 
 shop_vue/src/views/plus/release/grade/part/list.vue                 |  189 +
 mobile/pages3/release/project/detail.vue                            |  117 
 admin/app/common/model/plus/vip/Order.php                           |   35 
 admin/app/shop/model/plus/release/DemandProject.php                 |    4 
 shop_vue/src/views/plus/release/evaluate/list.vue                   |  174 +
 admin/app/supplier/controller/plus/release/Setting.php              |  144 
 supplier_vue/src/api/plus/release.js                                |  178 +
 shop_vue/src/views/plus/release/grade/index.vue                     |   32 
 admin/app/supplier/controller/plus/release/Tag.php                  |   71 
 mobile/pages3/release/project/look-evaluate/look-evaluate.vue       |  295 +
 admin/app/shop/controller/plus/release/SupplyUser.php               |    5 
 admin/app/shop/model/plus/release/SupplyProject.php                 |    4 
 supplier_vue/src/views/plus/release/demand/apply/Apply.vue          |  169 +
 supplier_vue/src/views/plus/bonus/index.vue                         |    5 
 supplier_vue/src/views/plus/release/supplyproject/dialog/Edit.vue   |   92 
 supplier_vue/src/views/plus/release/setting/part/Settlement.vue     |  102 
 admin/app/api/controller/plus/release/DemandProject.php             |   18 
 admin/app/common/model/plus/vip/User.php                            |    4 
 shop_vue/src/views/plus/release/setting/part/Settlement备份可删.vue     |  104 
 admin/app/supplier/controller/plus/release/Order.php                |   91 
 supplier_vue/src/views/plus/release/supplyproject/Edit.vue          |   77 
 shop_vue/src/views/plus/vip/user/dialog/SubUser.vue                 |  136 
 /dev/null                                                           |   35 
 admin/app/common/model/plus/bonus/Order.php                         |   20 
 mobile/pages3/release/supplyproject/release.vue                     |   21 
 admin/app/shop/model/plus/release/Evaluate.php                      |   45 
 mobile/pages3/release/demandindex/index.vue                         |   88 
 admin/app/api/controller/plus/release/DemandIndex.php               |   28 
 supplier_vue/src/views/plus/release/supplyproject/index.vue         |  227 +
 supplier_vue/src/views/plus/release/grade/part/Add.vue              |  136 
 admin/app/common/model/plus/vip/Setting.php                         |    4 
 admin/app/supplier/controller/plus/release/DemandProject.php        |   54 
 129 files changed, 9,723 insertions(+), 162 deletions(-)

diff --git a/admin/app/api/controller/plus/release/Chat.php b/admin/app/api/controller/plus/release/Chat.php
new file mode 100644
index 0000000..6cc832d
--- /dev/null
+++ b/admin/app/api/controller/plus/release/Chat.php
@@ -0,0 +1,60 @@
+<?php
+
+namespace app\api\controller\plus\release;
+
+use app\api\model\plus\release\Chat as ChatModel;
+use app\api\controller\Controller;
+
+/**
+ * 客服消息
+ */
+class Chat extends Controller
+{
+    protected $user;
+    /**
+     * 构造方法
+     */
+    public function initialize()
+    {
+        $this->user = $this->getUser();
+    }
+
+    //我的聊天列表
+    public function index()
+    {
+        $Chat = new ChatModel;
+        $list = $Chat->myList($this->user);
+        return $this->renderSuccess('', compact('list'));
+    }
+
+    //添加消息
+    public function add()
+    {
+        $Chat = new ChatModel;
+        if ($Chat->add($this->postData(), $this->user)) {
+            return $this->renderSuccess('发送成功');
+        } else {
+            return $this->renderError($Chat->getError() ?: '发送失败');
+        }
+
+    }
+
+    //获取聊天信息
+    public function message()
+    {
+        $postData = $this->postData();
+       // $postData['you_user_id'] = 796;
+        $Chat = new ChatModel;
+        $list = $Chat->getMessage($postData, $this->user);
+        return $this->renderSuccess('', compact('list'));
+    }
+
+    //获取聊天用户信息
+    public function getInfo()
+    {
+        $Chat = new ChatModel;
+        $info = $Chat->getInfo($this->user['user_id']);
+        return $this->renderSuccess('', compact('info'));
+    }
+
+}
\ No newline at end of file
diff --git a/admin/app/api/controller/plus/release/DemandIndex.php b/admin/app/api/controller/plus/release/DemandIndex.php
index 70a1471..3558941 100644
--- a/admin/app/api/controller/plus/release/DemandIndex.php
+++ b/admin/app/api/controller/plus/release/DemandIndex.php
@@ -7,6 +7,7 @@
 use app\api\model\plus\release\DemandUser as DemandUserModel;
 use app\api\model\settings\Message as MessageModel;
 use app\common\exception\BaseException;
+use app\api\model\plus\release\Setting;
 
 /**
  * 首页
@@ -32,6 +33,9 @@
     public function index()
     {
         $is_release = $this->isReleaseUser();
+        //获取开通权限连盟币
+         $setting = Setting::getAll();
+         $setting = $setting['settlement']['values'];
 
         return $this->renderSuccess('', [
             'is_release' => $is_release,
@@ -41,6 +45,7 @@
             'user' => $this->user,
             // 信息
             'release' => $this->release,
+            'setting' => $setting,
             // 背景图
             'background' => '',
         ]);
@@ -95,4 +100,27 @@
         }
         return $this->renderError($model->getError() ?: '提交失败');
     }
+
+     public function topay()
+    {
+        $data = $this->postData();
+        //获取支付连盟币
+         $setting = Setting::getAll();
+         $setting = $setting['settlement']['values'];
+         $user = $this->user;
+         $pay_price = empty($setting['check_price']) ? 0 : $setting['check_price'];
+         $point = $user['points'];
+         if($pay_price > $point){
+             return $this->renderError('连盟币不足');
+         }
+         $release= $this->release;
+         if($release['is_check'] == 1){
+             return $this->renderError('权限已开通,请勿重复开通');
+         }
+        $model = new DemandUserModel;
+        if ($model->topay($user, $pay_price)) {
+            return $this->renderSuccess('开通成功');
+        }
+        return $this->renderError($model->getError() ?: '提交失败');
+    }
 }
\ No newline at end of file
diff --git a/admin/app/api/controller/plus/release/DemandProject.php b/admin/app/api/controller/plus/release/DemandProject.php
index c4fd0a8..428266a 100644
--- a/admin/app/api/controller/plus/release/DemandProject.php
+++ b/admin/app/api/controller/plus/release/DemandProject.php
@@ -7,6 +7,7 @@
 use app\api\model\plus\release\DemandUser as DemandUserModel;
 use app\api\model\plus\release\ReleaseCategory as ReleaseCategoryModel;
 use app\common\model\plus\release\ReleaseProjectImage as ReleaseProjectImageModel;
+use app\api\model\plus\release\Setting;
 
 
 /**
@@ -53,8 +54,12 @@
      */
     public function defaultData()
     {
-        return $this->renderSuccess('', [
+        //获取支付连盟币
+         $setting = Setting::getAll();
+         $setting = $setting['settlement']['values'];
+         return $this->renderSuccess('', [
             'category_list' => ReleaseCategoryModel::getALL(),
+            'setting' => $setting,
         ]);
     }
 
@@ -81,8 +86,17 @@
     public function add()
     {
         $postData = $this->postData();
+        //获取支付连盟币
+         $setting = Setting::getAll();
+         $setting = $setting['settlement']['values'];
+         $user = $this->user;
+         $pay_price = empty($setting['demand_price']) ? 0 : $setting['demand_price'];
+         $point = $user['points'];
+         if($pay_price > $point){
+             return $this->renderError('连盟币不足');
+         }
         $model = new ProjectModel;
-        if ($model->add($postData,$this->demand)) {
+        if ($model->add($postData,$this->demand, $pay_price)) {
             return $this->renderSuccess('提交成功');
         }
         return $this->renderError($model->getError() ?: '提交失败');
diff --git a/admin/app/api/controller/plus/release/Evaluate.php b/admin/app/api/controller/plus/release/Evaluate.php
new file mode 100644
index 0000000..d38e42f
--- /dev/null
+++ b/admin/app/api/controller/plus/release/Evaluate.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace app\api\controller\plus\release;
+
+use app\api\controller\Controller;
+use app\api\model\plus\release\Evaluate as EvaluateModel;
+
+
+/**
+ * 模型
+ */
+class Evaluate extends Controller
+{
+    // 当前用户
+    private $user;
+
+    /**
+     * 构造方法
+     */
+    public function initialize()
+    {
+        // 用户信息
+        $this->user = $this->getUser();;
+    }
+
+    /**
+     * 列表
+     */
+    public function lists($project_id, $scoreType = -1)
+    {
+        $model = new EvaluateModel;
+        $list = $model->getEvaluateList($project_id, $scoreType, $this->postData());
+        $total = $model->getTotal($project_id);
+        return $this->renderSuccess('', compact('list', 'total'));
+    }
+
+
+
+    /**
+     *评论
+     */
+    public function evaluate()
+    {
+        $params = $this->request->param();
+        $model = new EvaluateModel;
+        $params['user_id'] = $this->user['user_id'];
+        $params['image_list'] = json_decode($params['image_list'],true);
+        $result = $model->evaluate($params);
+        if(!$result){
+            return $this->renderError($model->getError() ?: '评论失败');
+        }
+        return $this->renderSuccess('评论成功');
+    }
+
+}
\ No newline at end of file
diff --git a/admin/app/api/controller/plus/release/Project.php b/admin/app/api/controller/plus/release/Project.php
index 04b67f1..2ec5dfe 100644
--- a/admin/app/api/controller/plus/release/Project.php
+++ b/admin/app/api/controller/plus/release/Project.php
@@ -38,10 +38,22 @@
         $model = new ProjectModel;
         $user_id = $this->user['user_id'];
 
+        $is_check = 0;
+        $demanduser = DemandUserModel::detail($user_id);
+        if(empty($demanduser)){
+           $supplyuser = SupplyUserModel::detail($user_id);
+           if(!empty($supplyuser)){
+             $is_check = $supplyuser['is_check'];
+           }
+        }else{
+            $is_check = $demanduser['is_check'];
+        }
+
         return $this->renderSuccess('', [
             // 列表
             'list' => $model->getList($user_id,$postData),
             'category_list' => ReleaseCategoryModel::getALL(),
+            'is_check' => $is_check,
         ]);
     }
 
diff --git a/admin/app/api/controller/plus/release/SupplyIndex.php b/admin/app/api/controller/plus/release/SupplyIndex.php
index 569e99f..ea5a0eb 100644
--- a/admin/app/api/controller/plus/release/SupplyIndex.php
+++ b/admin/app/api/controller/plus/release/SupplyIndex.php
@@ -7,6 +7,7 @@
 use app\api\model\plus\release\SupplyUser as SupplyUserModel;
 use app\api\model\settings\Message as MessageModel;
 use app\common\exception\BaseException;
+use app\api\model\plus\release\Setting;
 
 /**
  * 首页
@@ -33,6 +34,10 @@
     {
         $is_release = $this->isReleaseUser();
 
+        //获取开通权限连盟币
+         $setting = Setting::getAll();
+         $setting = $setting['settlement']['values'];
+
         return $this->renderSuccess('', [
             // 当前是否
             'is_release' => $is_release,
@@ -42,6 +47,7 @@
             'user' => $this->user,
             // 信息
             'release' => $this->release,
+            'setting' => $setting,
             // 背景图
             'background' => '',
         ]);
@@ -96,4 +102,27 @@
         }
         return $this->renderError($model->getError() ?: '提交失败');
     }
+
+     public function topay()
+    {
+        $data = $this->postData();
+        //获取支付连盟币
+         $setting = Setting::getAll();
+         $setting = $setting['settlement']['values'];
+         $user = $this->user;
+         $pay_price = empty($setting['check_price']) ? 0 : $setting['check_price'];
+         $point = $user['points'];
+         if($pay_price > $point){
+             return $this->renderError('连盟币不足');
+         }
+         $release= $this->release;
+         if($release['is_check'] == 1){
+             return $this->renderError('权限已开通,请勿重复开通');
+         }
+        $model = new SupplyUserModel;
+        if ($model->topay($user, $pay_price)) {
+            return $this->renderSuccess('开通成功');
+        }
+        return $this->renderError($model->getError() ?: '提交失败');
+    }
 }
\ No newline at end of file
diff --git a/admin/app/api/controller/plus/release/SupplyProject.php b/admin/app/api/controller/plus/release/SupplyProject.php
index 932b90b..cec5ab4 100644
--- a/admin/app/api/controller/plus/release/SupplyProject.php
+++ b/admin/app/api/controller/plus/release/SupplyProject.php
@@ -9,6 +9,7 @@
 use app\api\model\plus\release\Tag as TagModel;
 use app\common\model\plus\release\ReleaseProjectTag as ReleaseProjectTagModel;
 use app\common\model\plus\release\ReleaseProjectImage as ReleaseProjectImageModel;
+use app\api\model\plus\release\Setting;
 
 
 /**
@@ -55,9 +56,13 @@
      */
     public function defaultData()
     {
+        //获取支付连盟币
+         $setting = Setting::getAll();
+         $setting = $setting['settlement']['values'];
         return $this->renderSuccess('', [
             'category_list' => ReleaseCategoryModel::getALL(),
             'tag_list' => TagModel::getALL(),
+            'setting' => $setting,
         ]);
     }
 
@@ -94,8 +99,17 @@
     public function add()
     {
         $postData = $this->postData();
+        //获取支付连盟币
+         $setting = Setting::getAll();
+         $setting = $setting['settlement']['values'];
+         $user = $this->user;
+         $pay_price = empty($setting['supply_price']) ? 0 : $setting['supply_price'];
+         $point = $user['points'];
+         if($pay_price > $point){
+             return $this->renderError('连盟币不足');
+         }
         $model = new ProjectModel;
-        if ($model->add($postData,$this->supply)) {
+        if ($model->add($postData,$this->supply, $pay_price)) {
             return $this->renderSuccess('提交成功');
         }
         return $this->renderError($model->getError() ?: '提交失败');
diff --git a/admin/app/api/model/branch/ActivityUser.php b/admin/app/api/model/branch/ActivityUser.php
index fe233e7..792b2dd 100644
--- a/admin/app/api/model/branch/ActivityUser.php
+++ b/admin/app/api/model/branch/ActivityUser.php
@@ -39,7 +39,7 @@
     public function getListForUser($user_id, $params = [])
     {
         // 构建查询规则
-        $model = $this->alias('A')->with(['activity' => ['branch', 'image']])
+        $model = $this->alias('A')->with(['activity' => ['branch', 'image'],'branch'])
             ->join('branch_activity B', 'B.activity_id = A.activity_id')
             ->field('A.*')
             ->visible(['activity' => ['name', 'image' => ['file_path'], 'branch' => ['name']]])
@@ -65,6 +65,7 @@
     {
         // 构建查询规则
         $model = $this->alias('auser')
+            ->with('branch')
             ->field('auser.*,user.nickName,auser.real_name,user.avatarUrl')
             ->join('user', 'user.user_id = auser.user_id')
             ->where('auser.is_delete', '=', 0)
diff --git a/admin/app/api/model/plus/release/Chat.php b/admin/app/api/model/plus/release/Chat.php
new file mode 100644
index 0000000..50bbca1
--- /dev/null
+++ b/admin/app/api/model/plus/release/Chat.php
@@ -0,0 +1,86 @@
+<?php
+
+namespace app\api\model\plus\release;
+
+use app\common\model\plus\release\Chat as ChatModel;
+use app\common\model\plus\release\ChatRelation as ChatRelationModel;
+use app\api\model\user\User as UserModel;
+
+/**
+ * 消息模型类
+ */
+class Chat extends ChatModel
+{
+
+    /**
+     * 隐藏字段
+     */
+    protected $hidden = [
+        'app_id',
+        'update_time'
+    ];
+
+    //消息列表
+    public function myList($user)
+    {
+        $ChatRelation = new ChatRelation();
+        $list = $ChatRelation->with(['user'])
+            ->where(['user_id' => $user['user_id']])
+            ->whereOr(['other_user_id' => $user['user_id']])
+            ->order('update_time desc')
+            ->select();
+        foreach ($list as $key => &$value) {
+            $where['relation_id'] = $value['relation_id'];
+            if($value['user_id'] == $user['user_id']){
+                $where['user_id']= $other_user_id = $value['other_user_id'];
+            }else{
+                $where['user_id']= $other_user_id  = $value['user_id'];
+            }
+            $where['status'] = 0;
+            $value['num'] = $this->where($where)->count();
+            unset($where['status']);
+            $value['newMessage'] = $this->where($where)->order('chat_id desc')->field('content,create_time')->find();
+            $value['user'] = UserModel::detail($other_user_id);
+        }
+        return $list;
+    }
+
+    //获取聊天信息
+    public function getMessage($data, $user)
+    {
+        $relation_id = ChatRelationModel::getRelationId($user['user_id'],$data['you_user_id']);   
+        $list = $this->where("relation_id","=",$relation_id)
+            ->with(['user'])
+            ->order('chat_id desc')
+            ->paginate($data);
+        $where['relation_id'] = $relation_id;
+        $where['user_id'] = $data['you_user_id'];    
+        $this->where($where)->update(['status' => 1]);
+        return $list;
+    }
+
+    //获取消息条数
+    public function mCount($user)
+    {
+        $num = 0;
+        if ($user) {
+            $num = $this->where('user_id', '=', $user['user_id'])->whereOr('user_id', '=', $user['user_id'])->count();
+        }
+        return $num;
+    }
+
+    //获取用户信息
+    public function getInfo($user_id)
+    {
+        $userInfo = UserModel::detail($user_id);
+        $data['avatarUrl'] = $userInfo['avatarUrl'];
+        return $data;
+    }
+
+    public static function getNoReadCount($user_id){
+        return self::where('user_id', '=', $user_id)->whereOr('user_id', '=', $user_id)
+            //->where('status', '=', 0)
+            ->count();
+    }
+
+}
diff --git a/admin/app/api/model/plus/release/ChatRelation.php b/admin/app/api/model/plus/release/ChatRelation.php
new file mode 100644
index 0000000..f566a1b
--- /dev/null
+++ b/admin/app/api/model/plus/release/ChatRelation.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace app\api\model\plus\release;
+use app\common\model\plus\release\ChatRelation as ChatRelationModel;
+
+
+/**
+ * 消息关系模型类
+ */
+class ChatRelation extends ChatRelationModel
+{
+
+    /**
+     * 隐藏字段
+     */
+    protected $hidden = [
+        'app_id',
+        'create_time',
+        'update_time'
+    ];
+
+    
+}
diff --git a/admin/app/api/model/plus/release/DemandProject.php b/admin/app/api/model/plus/release/DemandProject.php
index 8cbc59f..5774776 100644
--- a/admin/app/api/model/plus/release/DemandProject.php
+++ b/admin/app/api/model/plus/release/DemandProject.php
@@ -4,7 +4,8 @@
 
 use app\common\model\plus\release\Project as ProjectModel;
 use app\common\model\plus\release\ReleaseProjectImage as ReleaseProjectImageModel;
-
+use app\common\model\user\User as UserModel;
+use app\common\model\user\PointsLog as PointsLogModel;
 
 /**
  * 模型
@@ -29,7 +30,7 @@
     /**
      * 新增记录
      */
-    public function add($postdata,$demand)
+    public function add($postdata,$demand,$pay_price)
     {
         $data = json_decode($postdata["formData"],true);
         if (empty($data['name'])) {
@@ -55,6 +56,8 @@
             'category_id'=>$data["category_id"],
             'price'=>$data["price"],
             'content'=>$data["content"],
+            'product_content'=>$data["product_content"],
+            'product_case'=>$data["product_case"],
             'detail'=>$data["detail"],
             'show_phone'=>$data["show_phone"],
             'is_show'=>$data["is_show"],
@@ -66,11 +69,22 @@
             $save_data["finish_time"] = '';
         }
 
-          return $this->transaction(function () use ($data, $save_data) {
+          return $this->transaction(function () use ($data, $save_data,$pay_price) {
             // 记录内容
             $this->save($save_data);
             // 记录图片
             $this->saveAllImages($this['project_id'],$data);
+
+            //减少连盟币
+            if($pay_price>0){
+                (new UserModel())->where('user_id', '=', $save_data['user_id'])->dec('points',$pay_price)->update();
+                PointsLogModel::add([
+                    'user_id' => $save_data['user_id'],
+                    'value' => -$pay_price,
+                    'describe' => "发布需求消耗连盟币",
+                    'app_id' => $save_data['app_id'],
+                ]);
+            }
             
             return $this['project_id'];
         });
@@ -103,6 +117,8 @@
             'category_id'=>$data["category_id"],
             'price'=>$data["price"],
             'content'=>$data["content"],
+            'product_content'=>$data["product_content"],
+            'product_case'=>$data["product_case"],
             'detail'=>$data["detail"],
             'show_phone'=>$data["show_phone"],
             'is_show'=>$data["is_show"],
diff --git a/admin/app/api/model/plus/release/DemandUser.php b/admin/app/api/model/plus/release/DemandUser.php
index 79085f3..88c1efb 100644
--- a/admin/app/api/model/plus/release/DemandUser.php
+++ b/admin/app/api/model/plus/release/DemandUser.php
@@ -3,6 +3,9 @@
 namespace app\api\model\plus\release;
 
 use app\common\model\plus\release\DemandUser as UserModel;
+use app\common\model\plus\release\SupplyUser as SupplyUserModel;
+use app\common\model\user\User as RealUserModel;
+use app\common\model\user\PointsLog as PointsLogModel;
 
 /**
  * 用户模型
@@ -28,4 +31,33 @@
         ]);
     }
 
+     /**
+     * 开通权限
+     */
+    public function topay($user,$pay_price)
+    {
+        $save_data =[
+            'is_check'=>1,
+        ];
+
+          return $this->transaction(function () use ($user, $save_data,$pay_price) {
+            // 改变权限状态
+            $this->where(['user_id'=>$user['user_id']])->save($save_data);
+            (new SupplyUserModel())->where(['user_id'=>$user['user_id']])->save($save_data);
+
+             //减少连盟币
+            if($pay_price>0){
+                (new RealUserModel())->where('user_id', '=', $user['user_id'])->dec('points',$pay_price)->update();
+                PointsLogModel::add([
+                    'user_id' => $user['user_id'],
+                    'value' => -$pay_price,
+                    'describe' => "开通查看信息权限消耗连盟币",
+                    'app_id' => self::$app_id,
+                ]);
+            }
+            
+            return true;
+        });
+    }
+
 }
\ No newline at end of file
diff --git a/admin/app/api/model/plus/release/Evaluate.php b/admin/app/api/model/plus/release/Evaluate.php
new file mode 100644
index 0000000..a4e4b68
--- /dev/null
+++ b/admin/app/api/model/plus/release/Evaluate.php
@@ -0,0 +1,98 @@
+<?php
+
+namespace app\api\model\plus\release;
+
+use app\common\model\plus\release\Evaluate as EvaluateModel;
+use app\common\model\user\User as UserModel;
+use app\common\model\user\PointsLog as PointsLogModel;
+use app\api\model\plus\release\Setting;
+use app\common\model\plus\release\Project as ProjectModel;
+use app\common\model\plus\release\Grade as GradeModel;
+
+/**
+ * 模型
+ */
+class Evaluate extends EvaluateModel
+{
+
+    /**
+     * 获取指定评论列表
+     */
+    public function getEvaluateList($project_id, $scoreType = -1, $limit = 15)
+    {
+        // 筛选条件
+        $filter = [
+            'project_id' => $project_id,
+        ];
+        // 评分
+        $scoreType > 0 && $filter['score'] = $scoreType;
+        return $this->with(['user'])
+            ->where($filter)
+            ->order(['create_time' => 'desc'])
+            ->paginate($limit);
+    }
+
+    /**
+     * 获取指定评分总数
+     */
+    public function getTotal($project_id)
+    {
+        return $this->field([
+            'count(id) AS `all`',
+            'count(score = 10 OR NULL) AS `praise`',
+            'count(score = 20 OR NULL) AS `review`',
+            'count(score = 30 OR NULL) AS `negative`',
+        ])->where([
+            'project_id' => $project_id,
+        ])->find();
+    }
+   /**
+     * 添加评论
+     */
+    public function evaluate($params)
+    {
+      //判断重复评论
+      $result = $this->where('user_id','=',$params["user_id"])->where('project_id','=',$params["project_id"])->find();
+      if(!empty($result)){
+            $this->error = '请勿重复评论';
+            return false;
+      }
+
+        //获取奖励的连盟币
+         $setting = Setting::getAll();
+         $setting = $setting['settlement']['values'];
+         $money = empty($setting['eve_money']) ? 0 : $setting['eve_money'];
+       
+        return $this->transaction(function () use ($params,$money) {
+             //奖励连盟币
+            if($money>0){
+                (new UserModel())->where('user_id', '=', $params['user_id'])->inc('points',$money)->update();
+                PointsLogModel::add([
+                    'user_id' => $params['user_id'],
+                    'value' => $money,
+                    'describe' => "评论奖励连盟币",
+                    'app_id' => self::$app_id,
+                ]);
+            }
+           
+           $project = ProjectModel::detail($params["project_id"]);
+
+            $data["user_id"] = $params["user_id"];
+            $data["project_user_id"] = $project["user_id"];
+            $data["project_id"] = $params["project_id"];
+            $data["evaluate_content"] = $params["evaluate_content"];
+            //$data["server_score"] = $params["server_score"];
+            $data["score"] = empty($params["score"]) ? 10 : $params["score"];
+            $data["image_list"] = json_encode($params["image_list"]);
+            $data["app_id"] = self::$app_id;
+            $this->save($data);
+
+             //好评判断升级等级
+            if($params["score"] == 10){
+                (new GradeModel())->setUserGrade($project["user_id"],$project["project_type"]);
+            }
+
+            return true;
+        });
+    }
+}
\ No newline at end of file
diff --git a/admin/app/api/model/plus/release/Project.php b/admin/app/api/model/plus/release/Project.php
index 020ba26..ba04a29 100644
--- a/admin/app/api/model/plus/release/Project.php
+++ b/admin/app/api/model/plus/release/Project.php
@@ -3,7 +3,9 @@
 namespace app\api\model\plus\release;
 
 use app\common\model\plus\release\Project as ProjectModel;
-
+use app\common\model\plus\release\DemandUser as DemandUserModel;
+use app\common\model\plus\release\SupplyUser as SupplyUserModel;
+use app\common\model\plus\release\ReleaseProjectImage as ReleaseProjectImageModel;
 
 /**
  * 模型
@@ -20,15 +22,38 @@
             $model = $model->where('name', 'like', '%'.$postdata["keyword"].'%');
         }
         if(!empty($postdata["category_id"])){
-            $model = $model->where('category_id', '=', $postdata["category_id"]);
+            if($postdata["category_id"] == '-1'){
+                //根据分类匹配
+                $category_ids = (new ProjectModel())->where('user_id','=',$user_id)
+                ->where('project_type','=',$postdata["product_type"])
+                ->column('category_id');
+                if(!empty($category_ids)){
+                    $model = $model->where('category_id', 'in', $category_ids); 
+                }
+            }else{
+               $model = $model->where('category_id', '=', $postdata["category_id"]); 
+            }
+            
         }
-        return $model->with(['category','user'])->where('is_delete', '=', 0)
+        $list = $model->with(['category','user'])->where('is_delete', '=', 0)
             ->where('project_type', '=', $postdata["product_type"])
             ->where('status', '=', 1)
             ->where('is_show', '=', 1)
             ->where('user_id', '<>', $user_id)
             ->order(['create_time' => 'desc'])
             ->paginate($postdata);
+
+         foreach($list as &$val){
+            if($postdata["product_type"] == 0){
+                $release_user = DemandUserModel::detail($val['user_id'],['grade']);
+            }else{
+                $release_user = SupplyUserModel::detail($val['user_id'],['grade']);
+            }
+            $val['grade'] = empty($release_user['grade']) ? '' : $release_user['grade'];
+            $image_list = ReleaseProjectImageModel::getImage($val["project_id"]);
+            $val['image'] = empty($image_list[0]) ? '/static/default.png' : $image_list[0]['file_path']; 
+         }   
+         return $list;
     }  
 
 }
\ No newline at end of file
diff --git a/admin/app/api/model/plus/release/SupplyProject.php b/admin/app/api/model/plus/release/SupplyProject.php
index ba90cc3..e22e939 100644
--- a/admin/app/api/model/plus/release/SupplyProject.php
+++ b/admin/app/api/model/plus/release/SupplyProject.php
@@ -6,6 +6,8 @@
 use app\common\model\plus\release\ReleaseProjectImage as ReleaseProjectImageModel;
 use app\common\model\plus\release\Tag as TagModel;
 use app\common\model\plus\release\ReleaseProjectTag as ReleaseProjectTagModel;
+use app\common\model\user\User as UserModel;
+use app\common\model\user\PointsLog as PointsLogModel;
 
 
 /**
@@ -31,7 +33,7 @@
     /**
      * 新增记录
      */
-    public function add($postdata,$supply)
+    public function add($postdata,$supply,$pay_price)
     {
         $data = json_decode($postdata["formData"],true);
         if (empty($data['name'])) {
@@ -57,6 +59,8 @@
             'category_id'=>$data["category_id"],
             'price'=>$data["price"],
             'content'=>$data["content"],
+            'product_content'=>$data["product_content"],
+            'product_case'=>$data["product_case"],
             'detail'=>$data["detail"],
             'project_type'=>1,
             'is_show'=>$data["is_show"],
@@ -69,13 +73,24 @@
             $save_data["finish_time"] = '';
         }
 
-          return $this->transaction(function () use ($data, $save_data) {
+          return $this->transaction(function () use ($data, $save_data,$pay_price) {
             // 记录内容
             $this->save($save_data);
             // 记录图片
             $this->saveAllImages($this['project_id'],$data);
             // 记录标签
             $this->saveTag($this['project_id'],$data);
+
+             //减少连盟币
+            if($pay_price>0){
+                (new UserModel())->where('user_id', '=', $save_data['user_id'])->dec('points',$pay_price)->update();
+                PointsLogModel::add([
+                    'user_id' => $save_data['user_id'],
+                    'value' => -$pay_price,
+                    'describe' => "发布供应消耗连盟币",
+                    'app_id' => $save_data['app_id'],
+                ]);
+            }
             
             return $this['project_id'];
         });
@@ -108,6 +123,8 @@
             'category_id'=>$data["category_id"],
             'price'=>$data["price"],
             'content'=>$data["content"],
+            'product_content'=>$data["product_content"],
+            'product_case'=>$data["product_case"],
             'detail'=>$data["detail"],
             'is_show'=>$data["is_show"],
             'status'=>0,
diff --git a/admin/app/api/model/plus/release/SupplyUser.php b/admin/app/api/model/plus/release/SupplyUser.php
index 156e50f..981ba6a 100644
--- a/admin/app/api/model/plus/release/SupplyUser.php
+++ b/admin/app/api/model/plus/release/SupplyUser.php
@@ -3,6 +3,9 @@
 namespace app\api\model\plus\release;
 
 use app\common\model\plus\release\SupplyUser as UserModel;
+use app\common\model\plus\release\DemandUser as DemandUserModel;
+use app\common\model\user\User as RealUserModel;
+use app\common\model\user\PointsLog as PointsLogModel;
 
 /**
  * 用户模型
@@ -28,4 +31,33 @@
         ]);
     }
 
+     /**
+     * 开通权限
+     */
+    public function topay($user,$pay_price)
+    {
+        $save_data =[
+            'is_check'=>1,
+        ];
+
+          return $this->transaction(function () use ($user, $save_data,$pay_price) {
+            // 改变权限状态
+            $this->where(['user_id'=>$user['user_id']])->save($save_data);
+            (new DemandUserModel())->where(['user_id'=>$user['user_id']])->save($save_data);
+
+             //减少连盟币
+            if($pay_price>0){
+                (new RealUserModel())->where('user_id', '=', $user['user_id'])->dec('points',$pay_price)->update();
+                PointsLogModel::add([
+                    'user_id' => $user['user_id'],
+                    'value' => -$pay_price,
+                    'describe' => "开通查看信息权限消耗连盟币",
+                    'app_id' => self::$app_id,
+                ]);
+            }
+            
+            return true;
+        });
+    }
+
 }
\ No newline at end of file
diff --git a/admin/app/api/service/order/settled/OrderSettledService.php b/admin/app/api/service/order/settled/OrderSettledService.php
index 8753840..31cecd8 100644
--- a/admin/app/api/service/order/settled/OrderSettledService.php
+++ b/admin/app/api/service/order/settled/OrderSettledService.php
@@ -342,7 +342,7 @@
     private function setOrderSettlementPrice($productList)
     {
         // 订单商品的总金额(不含优惠券折扣)
-        $this->orderData['settlement_price'] = helper::number2(helper::getArrayColumnSum($productList, 'settlement_price'));
+        $this->orderData['settlement_price'] = helper::number2(helper::getArrayColumnSum($productList, 'total_settlement_price'));
     }
 
     /**
diff --git a/admin/app/common/model/branch/ActivityUser.php b/admin/app/common/model/branch/ActivityUser.php
index d484aa3..a930a81 100644
--- a/admin/app/common/model/branch/ActivityUser.php
+++ b/admin/app/common/model/branch/ActivityUser.php
@@ -43,6 +43,10 @@
     {
         return $this->belongsTo('app\\common\\model\\branch\\Activity', 'activity_id', 'activity_id');
     }
+    public function branch()
+    {
+        return $this->belongsTo('app\\common\\model\\branch\\Branch', 'branch_id', 'branch_id');
+    }
 
     /**
      * 支付状态
diff --git a/admin/app/common/model/plus/agent/Referee.php b/admin/app/common/model/plus/agent/Referee.php
index fc81252..db30d1b 100644
--- a/admin/app/common/model/plus/agent/Referee.php
+++ b/admin/app/common/model/plus/agent/Referee.php
@@ -59,7 +59,7 @@
         if($level > -1){
             $model = $model->where('referee.level', '=', $level);
         }
-        return $model->with(['agent', 'user'])
+        return $model->with(['agent', 'user'=>['grade']])
             ->alias('referee')
             ->field('referee.*')
             ->join('user', 'user.user_id = referee.user_id','left')
diff --git a/admin/app/common/model/plus/bonus/Order.php b/admin/app/common/model/plus/bonus/Order.php
index 5af96d9..ddb6e2b 100644
--- a/admin/app/common/model/plus/bonus/Order.php
+++ b/admin/app/common/model/plus/bonus/Order.php
@@ -4,7 +4,8 @@
 
 use app\common\model\BaseModel;
 use app\common\enum\order\OrderTypeEnum;
-use app\common\model\plus\bonus\User as UserModel;
+use app\common\model\plus\bonus\User as BonusUserModel;
+use app\common\model\user\User as UserModel;
 /**
  * 队长订单模型
  */
@@ -208,7 +209,7 @@
             return false;
         }
         // 获取当前买家的直推奖用户id和业绩奖用户id
-        $agentUser = $model->getAgentUserId($order, $setting['begin_num']);
+        $agentUser = $model->getAgentUserId($order, $setting['begin_num'], $setting);
         // 无分红用户
         if (!$agentUser['first_user_id'] && !$agentUser['second_user_id']) {
             return false;
@@ -251,21 +252,26 @@
     /**
      * 获取当前买家的所有上级分销商用户id
      */
-    private function getAgentUserId($order, $begin_num)
+    private function getAgentUserId($order, $begin_num, $setting)
     {
-        $user = UserModel::detail($order['user_id']);
+        $user = BonusUserModel::detail($order['user_id']);
         if (empty($user['parent_id'])) {
             $second_user_id = 0;
         } else {
-            $second_user_id = UserModel::getSecondUserId($user['user_id'], $begin_num, $order);
+            $second_user_id = BonusUserModel::getSecondUserId($user['user_id'], $begin_num, $order);
         }
         if ($second_user_id==0){
             $subsidy_user_id = 0;
         }else{
-            $subsidy_user_id = UserModel::getSubsidyUserId($second_user_id); //补贴用户
+            $subsidy_user_id = BonusUserModel::getSubsidyUserId($second_user_id); //补贴用户
+            if ($subsidy_user_id!=0){
+                if (!UserModel::getOperatingSubsidy($subsidy_user_id,$setting)){
+                    $subsidy_user_id = 0;
+                }
+            }
         }
         $agentUser = [
-            'first_user_id' => UserModel::getFirstUserId($order['user_id']), //直推用户
+            'first_user_id' => BonusUserModel::getFirstUserId($order['user_id']), //直推用户
             'second_user_id' => $second_user_id, //业绩奖用户
             'subsidy_user_id'=>$subsidy_user_id, //补贴用户
         ];
diff --git a/admin/app/common/model/plus/bonus/Setting.php b/admin/app/common/model/plus/bonus/Setting.php
index 6ec258d..b2e422f 100644
--- a/admin/app/common/model/plus/bonus/Setting.php
+++ b/admin/app/common/model/plus/bonus/Setting.php
@@ -125,6 +125,8 @@
                     'keep_assets' => '0', // 更换排位用户是否保留资产 1保留 0不保留
                     // 收益补贴
                     'operating_subsidy' => '0',
+                    'referee_grade_ids'=>[],
+                    'referee_grade_count'=>0,
                 ],
             ],
             'condition' => [
diff --git a/admin/app/common/model/plus/release/Chat.php b/admin/app/common/model/plus/release/Chat.php
new file mode 100644
index 0000000..bebf8c5
--- /dev/null
+++ b/admin/app/common/model/plus/release/Chat.php
@@ -0,0 +1,68 @@
+<?php
+namespace app\common\model\plus\release;
+
+use app\common\model\BaseModel;
+
+/**
+ * 消息模型
+ */
+class Chat extends BaseModel
+{
+    protected $pk = 'chat_id';
+    protected $name = 'release_chat';
+
+    /**
+     * 关联会员表
+     */
+    public function user()
+    {
+        return $this->belongsTo("app\\common\\model\\user\\User", 'user_id', 'user_id');
+    }
+
+
+
+
+    //添加信息
+    public function add($postdata,$user)
+    {
+        // 开启事务
+        $this->startTrans();
+        try {
+            
+            $ChatRelation = new ChatRelation();
+            
+            $info = $ChatRelation->where('user_id', '=', $user['user_id'])->where('other_user_id', '=', $postdata['you_user_id'])->find();
+            if(empty($info)){
+                $info = $ChatRelation->where('user_id', '=', $postdata['you_user_id'])->where('other_user_id', '=', $user['user_id'])->find();
+            }
+            if (!$info) {
+                $save_data=[
+                  'user_id'=>$user['user_id'],
+                  'other_user_id'=>$postdata['you_user_id'],
+                  'app_id'=>self::$app_id,
+                ];
+                $ChatRelation->save($save_data);
+                $relation_id = $ChatRelation['relation_id'];
+            } else {
+                $relation_id = $info['relation_id'];
+                $info->save(['update_time' => time()]);
+            }
+
+            $data=[
+               'user_id'=>$user['user_id'],
+               'content'=>$postdata['content'],
+               'relation_id'=>$relation_id,
+               'app_id'=>self::$app_id,
+            ];
+            $this->save($data);
+
+            $this->commit();
+            return true;
+        } catch (\Exception $e) {
+            log_write($e->getMessage());
+            $this->rollback();
+            return false;
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/admin/app/common/model/plus/release/ChatRelation.php b/admin/app/common/model/plus/release/ChatRelation.php
new file mode 100644
index 0000000..bbaa6f8
--- /dev/null
+++ b/admin/app/common/model/plus/release/ChatRelation.php
@@ -0,0 +1,44 @@
+<?php
+
+
+namespace app\common\model\plus\release;
+
+use app\common\model\BaseModel;
+
+/**
+ * 客服消息关系模型
+ */
+class ChatRelation extends BaseModel
+{
+    protected $pk = 'relation_id';
+    protected $name = 'release_chat_relation';
+
+    /**
+     * 关联会员表
+     */
+    public function user()
+    {
+        return $this->belongsTo('app\\common\\model\\user\\User', 'user_id', 'user_id');
+    }
+
+    /**
+     * 关联会员表
+     */
+    public function otherUser()
+    {
+        return $this->belongsTo("app\\common\\model\\user\\User", 'user_id', 'other_user_id');
+    }
+
+    /**
+     * 获取关联id
+     */
+    public static function getRelationId($user_id,$other_user_id)
+    {
+        $model = new static;
+        $data = $model->where("user_id",'=',$user_id)->where("other_user_id",'=',$other_user_id)->find();
+        if(empty($data)){
+            $data = $model->where("other_user_id",'=',$user_id)->where("user_id",'=',$other_user_id)->find();
+        }
+        return empty($data) ? 0 : $data['relation_id'];
+    }
+}
\ No newline at end of file
diff --git a/admin/app/common/model/plus/release/DemandUser.php b/admin/app/common/model/plus/release/DemandUser.php
index 16e5fd0..7a3092c 100644
--- a/admin/app/common/model/plus/release/DemandUser.php
+++ b/admin/app/common/model/plus/release/DemandUser.php
@@ -22,6 +22,15 @@
         return $this->belongsTo('app\\common\\model\\user\\User');
     }
 
+    /**
+     * 关联等级
+     * @return \think\model\relation\BelongsTo
+     */
+    public function grade()
+    {
+        return $this->belongsTo('app\\common\\model\\plus\\release\\Grade','grade_id','grade_id');
+    }
+
 
     /**
      * 详情
diff --git a/admin/app/common/model/plus/release/Evaluate.php b/admin/app/common/model/plus/release/Evaluate.php
new file mode 100644
index 0000000..24aa786
--- /dev/null
+++ b/admin/app/common/model/plus/release/Evaluate.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace app\common\model\plus\release;
+
+use app\common\model\BaseModel;
+
+/**
+ * 模型
+ */
+class Evaluate extends BaseModel
+{
+    protected $name = 'release_project_evaluate';
+    protected $pk = 'id';
+
+    /**
+     * 关联会员记录表
+     * @return \think\model\relation\BelongsTo
+     */
+    public function user()
+    {
+        return $this->belongsTo('app\\common\\model\\user\\User');
+    }
+
+    /**
+     * 预售结束时间
+     */
+    public function getImageListAttr($value, $data)
+    {
+        return (isset($data['image_list']) && $data['image_list']) ? json_decode($data['image_list'],true) : '';
+    }
+
+    /**
+     * 获取详情
+     */
+    public static function detail($id)
+    {
+        return (new static())->find($id);
+    }
+
+    /**
+     * 获取列表记录
+     */
+    public static function getAll($prject_id)
+    {
+        return (new static())->with('user')->where('project_id', '=', $prject_id)
+            ->order(['create_time' => 'asc'])
+            ->select();
+    }
+
+     /**
+     * 获取好评条数
+     */
+    public static function getGoodsEvaluateNum($project_user_id)
+    {
+        return (new static())->where('project_user_id', '=', $project_user_id)
+            ->where('score', '=', 10)
+            ->count();
+    }
+}
\ No newline at end of file
diff --git a/admin/app/common/model/plus/release/Grade.php b/admin/app/common/model/plus/release/Grade.php
new file mode 100644
index 0000000..41bb032
--- /dev/null
+++ b/admin/app/common/model/plus/release/Grade.php
@@ -0,0 +1,112 @@
+<?php
+
+namespace app\common\model\plus\release;
+
+use app\common\model\BaseModel;
+use app\common\model\plus\release\DemandUser as DemandUserModel;
+use app\common\model\plus\release\SupplyUser as SupplyUserModel;
+use app\common\model\plus\release\Evaluate as EvaluateModel;
+
+/**
+ * 等级模型
+ */
+class Grade extends BaseModel
+{
+    protected $pk = 'grade_id';
+    protected $name = 'release_grade';
+
+    /**
+     * 用户等级模型初始化
+     */
+    public static function init()
+    {
+        parent::init();
+    }
+
+    /**
+     * 获取详情
+     */
+    public static function detail($grade_id)
+    {
+        return (new static())->find($grade_id);
+    }
+
+    /**
+     * 获取列表记录
+     */
+    public function getLists()
+    {
+        return $this->where('is_delete', '=', 0)
+            ->field('grade_id,name')
+            ->order(['weight' => 'asc', 'create_time' => 'asc'])
+            ->select();
+    }
+
+    /**
+     * 获取可用的等级列表
+     */
+    public static function getUsableList($appId = null)
+    {
+        $model = new static;
+        $appId = $appId ? $appId : $model::$app_id;
+        return $model->where('is_delete', '=', '0')
+            ->where('app_id', '=', $appId)
+            ->order(['weight' => 'asc', 'create_time' => 'asc'])
+            ->select();
+    }
+
+    /**
+     * 获取默认等级id
+     */
+    public static function getDefaultGradeId(){
+        $grade = (new static())->where('is_default', '=', 1)->find();
+        return $grade['grade_id'];
+    }
+
+    /**
+     * 设置用户的评论等级
+     */
+    public function setUserGrade($userId,$prodect_type=0)
+    {
+        // 用户模型
+        if($prodect_type == 0){
+            $user = DemandUserModel::detail($userId);
+        }else{
+            $user = SupplyUserModel::detail($userId);
+        }
+        if(empty($user)){
+            return true;
+        }
+        // 获取所有等级
+        $list = self::getUsableList($user['app_id']);
+        if ($list->isEmpty()) {
+            return false;
+        }
+        //获取用户的好评条数
+        $num = EvaluateModel::getGoodsEvaluateNum($userId);
+
+        // 遍历等级
+        $upgradeGrade = null;
+        foreach ($list as $grade) {
+            if($grade['upgrade_num'] > 0 && $num >=$grade['upgrade_num']){
+                $upgradeGrade = $grade;
+                //满足条件,继续判断更高等级是否满足
+                continue;
+            }else{
+                //第一个等级不满足,则更高的等级不需要再看了
+                break;
+            }
+        }
+        //获取当前的等级权重
+        $cur_grade = self::detail($user['grade_id']);
+        //两个等级权重对比
+        if(!empty($upgradeGrade) && $upgradeGrade['weight'] > $cur_grade['weight']){
+            // 修改等级
+            if($prodect_type == 0){
+              $user = (new DemandUserModel())->where('user_id','=',$user['user_id'])->update(['grade_id'=>$upgradeGrade['grade_id']]);
+           }else{
+              $user = (new SupplyUserModel())->where('user_id','=',$user['user_id'])->update(['grade_id'=>$upgradeGrade['grade_id']]);;
+           }    
+        }
+    }
+}
\ No newline at end of file
diff --git a/admin/app/common/model/plus/release/Project.php b/admin/app/common/model/plus/release/Project.php
index 7581ba8..516f3db 100644
--- a/admin/app/common/model/plus/release/Project.php
+++ b/admin/app/common/model/plus/release/Project.php
@@ -48,13 +48,21 @@
     {
         return $this->hasMany('app\\common\\model\\plus\\release\\Tag', 'tag_id', 'tag_id');
     }
+    /**
+     * 关联评论表
+     */
+    public function evaluate()
+    {
+        return $this->hasMany('app\\common\\model\\plus\\release\\Evaluate', 'project_id', 'project_id')->order(['id' => 'desc']);
+    }
+
 
     /**
      * 获取详情
      */
     public static function detail($project_id)
     {
-        return (new static())->with(['image'])->find($project_id);
+        return (new static())->with(['image','evaluate','evaluate.user','category'])->find($project_id);
     }
 
     /**
diff --git a/admin/app/common/model/plus/release/SupplyUser.php b/admin/app/common/model/plus/release/SupplyUser.php
index 2c408ab..3ee0e2e 100644
--- a/admin/app/common/model/plus/release/SupplyUser.php
+++ b/admin/app/common/model/plus/release/SupplyUser.php
@@ -22,6 +22,15 @@
         return $this->belongsTo('app\\common\\model\\user\\User');
     }
 
+    /**
+     * 关联等级
+     * @return \think\model\relation\BelongsTo
+     */
+    public function grade()
+    {
+        return $this->belongsTo('app\\common\\model\\plus\\release\\Grade','grade_id','grade_id');
+    }
+
 
     /**
      * 详情
diff --git a/admin/app/common/model/plus/vip/Order.php b/admin/app/common/model/plus/vip/Order.php
index e380504..7b68882 100644
--- a/admin/app/common/model/plus/vip/Order.php
+++ b/admin/app/common/model/plus/vip/Order.php
@@ -149,16 +149,22 @@
                 // 获取下级用户的推荐人(即上级用户)
                 $superiorUser = UserModel::detail($model['vip_area_user_id']);
                 if ($superiorUser && $superiorUser['referee_id']) {
-                    $vipUser = VipUserModel::detail($superiorUser['vip_area_user_id']);
-                    if ($vipUser['grade']['operating_subsidy'] > 0) {
-                        // 获取补贴比例设置
-                        $subsidyRate = $vipUser['grade']['operating_subsidy'];
-                        // 计算下级收益补贴
-                        $subsidyAmount = bcmul($model['vip_area_money'], bcdiv((string)$subsidyRate, '100', 4), 2);
-                        User::grantMoney($superiorUser['referee_id'], $subsidyAmount, '下级收益补贴');
-                        // 记录分销订单
-                        self::createDistributionOrder($order, $superiorUser['referee_id'], $subsidyAmount, 'vip_subsidy', $model['vip_area_money']);
+                    if (UserModel::getOperatingSubsidy($superiorUser['referee_id'],Setting::getItem('basic', $order['app_id']))){
+                        $vipUser = VipUserModel::detail($superiorUser['referee_id']);
+                        if (!empty($vipUser)){
+                            if ($vipUser['grade']['operating_subsidy'] > 0) {
+                                // 获取补贴比例设置
+                                $subsidyRate = $vipUser['grade']['operating_subsidy'];
+                                // 计算下级收益补贴
+                                $subsidyAmount = bcmul($model['vip_area_money'], bcdiv((string)$subsidyRate, '100', 4), 2);
+                                User::grantMoney($superiorUser['referee_id'], $subsidyAmount, '下级收益补贴');
+                                // 记录分销订单
+                                self::createDistributionOrder($order, $superiorUser['referee_id'], $subsidyAmount, 'vip_subsidy', $model['vip_area_money']);
+                            }
+                        }
+
                     }
+
                 }
             }
 
@@ -302,7 +308,7 @@
                                 $viewpoint_money = bcadd($viewpoint_money, ($product['is_viewpoint_money'] ? $product['viewpoint_money'] : $vipGrade['viewpoint_money']), 2);
                             }*/
                             if (in_array($product['product_id'], $config['become__buy_product_ids']) || $product['is_vip']) {
-                                // 获取商品数量
+                                // 获取VIP专区商品数量
                                 $vip_quantity = bcadd($vip_quantity, $product['total_num'], 2);
                                 // 为每个商品生成分红订单
                                 /*for ($i = 0; $i < $quantity; $i++) {
@@ -337,14 +343,19 @@
                             if ($setting['jcaward']){
                                 $refereeJc=User::getAllJcUser($userModel['user_id']);
                                 foreach ($refereeJc as $v){
-                                    $list[] = array_merge($data, ['vip_area_type' => 70, 'vip_area_money' =>bcmul($product_price_repurchase, bcdiv($v['bonus_percent'], 100, 4), 2),'vip_area_user_id'=>$v['user_id']]);
+                                    if ( (new User())->getViewpointMoneyQualification($v['user_id'], $setting)){
+                                        $list[] = array_merge($data, ['vip_area_type' => 70, 'vip_area_money' =>bcmul($product_price_repurchase, bcdiv($v['bonus_percent'], 100, 4), 2),'vip_area_user_id'=>$v['user_id']]);
+                                    }
+
                                 }
                             }
                             //复购专区平级奖
                             if ($setting['pjaward']){
                                 $refereeJc=User::getAllPjUser($userModel['user_id'],$setting['pjaward_level']);
                                 foreach ($refereeJc as $v){
-                                    $list[] = array_merge($data, ['vip_area_type' => 80, 'vip_area_money' => bcmul($product_price_repurchase, bcdiv($v['bonus_percent'], 100, 4), 2),'vip_area_user_id'=>$v['user_id']]);
+                                    if ((new User())->getViewpointMoneyQualification($v['user_id'], $setting)) {
+                                        $list[] = array_merge($data, ['vip_area_type' => 80, 'vip_area_money' => bcmul($product_price_repurchase, bcdiv($v['bonus_percent'], 100, 4), 2), 'vip_area_user_id' => $v['user_id']]);
+                                    }
                                 }
                             }
                         }
diff --git a/admin/app/common/model/plus/vip/Setting.php b/admin/app/common/model/plus/vip/Setting.php
index ea012ed..4dae674 100644
--- a/admin/app/common/model/plus/vip/Setting.php
+++ b/admin/app/common/model/plus/vip/Setting.php
@@ -150,7 +150,9 @@
                     'platform_commission_rate' => '5',
                     'jcaward'=>'0',
                     'pjaward'=>'0',
-                    'pjaward_level'=>1
+                    'pjaward_level'=>1,
+                    'referee_grade_ids'=>[],
+                    'referee_grade_count'=>0
                 ],
             ],
             'settlement' => [
diff --git a/admin/app/common/model/plus/vip/User.php b/admin/app/common/model/plus/vip/User.php
index 6167cda..84abd66 100644
--- a/admin/app/common/model/plus/vip/User.php
+++ b/admin/app/common/model/plus/vip/User.php
@@ -166,7 +166,9 @@
         ]);
     }
 
-
+    /**
+     * 获取用户是否符合复购专区佣金条件
+     */
     public function getViewpointMoneyQualification($user_id,$setting)
     {
         $userNum=$this->where('referee_id','=',$user_id)->count();
diff --git a/admin/app/common/model/release/Capital.php b/admin/app/common/model/release/Capital.php
deleted file mode 100644
index 04c40dd..0000000
--- a/admin/app/common/model/release/Capital.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-namespace app\common\model\plus\release;
-
-use app\common\model\BaseModel;
-
-/**
- * 资金明细模型
- */
-class Capital extends BaseModel
-{
-    protected $name = 'release_capital';
-    protected $pk = 'id';
-
-    /**
-     * 分销商资金明细
-     * @param $data
-     */
-    public static function add($data)
-    {
-        $model = new static;
-        $model->save(array_merge([
-            'app_id' => $model::$app_id
-        ], $data));
-    }
-}
\ No newline at end of file
diff --git a/admin/app/common/model/release/Cart.php b/admin/app/common/model/release/Cart.php
deleted file mode 100644
index 807c36d..0000000
--- a/admin/app/common/model/release/Cart.php
+++ /dev/null
@@ -1,231 +0,0 @@
-<?php
-
-namespace app\api\model\plus\repair;
-
-use app\api\model\order\Order as OrderModel;
-use think\facade\Cache;
-use app\api\model\plus\repair\Project as ProjectModel;
-use app\common\model\supplier\Supplier as SupplierModel;
-use app\common\library\helper;
-use app\common\model\plus\repair\Cart as CartModel;
-
-/**
- * 购物车管理
- */
-class Cart extends CartModel
-{
-    // 错误信息
-    public $error = '';
-
-    /**
-     * 购物车列表 (含商品信息)
-     */
-    public function getList($user, $cart_ids = [])
-    {
-        // 获取购物车商品列表
-        return $this->getOrderProjectList($user, $cart_ids);
-    }
-
-    /**
-     * 获取购物车列表
-     */
-    public function getCartList($cartIds = null)
-    {
-        if (empty($cartIds)) return static::$cart;
-        $cartList = [];
-        $indexArr = (strpos($cartIds, ',') !== false) ? explode(',', $cartIds) : [$cartIds];
-        foreach ($indexArr as $index) {
-            isset(static::$cart[$index]) && $cartList[$index] = static::$cart[$index];
-        }
-        return $cartList;
-    }
-
-    /**
-     * 获取购物车中的商品列表
-     */
-    public function getOrderProjectList($user, $cart_ids = [])
-    {
-        // 购物车列表
-        $projectList = [];
-        // 获取购物车列表
-        $model = $this;
-        if ($cart_ids) {
-            $model = $model->where('cart_id', 'in', explode(',', $cart_ids));
-        }
-        $cartList = $model->where('user_id', '=', $user['user_id'])->select();
-        if (empty($cartList)) {
-            $this->setError('当前购物车没有项目');
-            return $projectList;
-        }
-        // 购物车中所有商品id集
-        $projectIds = array_unique(helper::getArrayColumn($cartList, 'project_id'));
-        // 获取并格式化商品数据
-        $sourceData = (new ProjectModel)->getListByIds($projectIds);
-        $sourceData = helper::arrayColumn2Key($sourceData, 'project_id');
-        // 供应商信息
-        $supplierData = [];
-        // 格式化购物车数据列表
-        foreach ($cartList as $key => $item) {
-            // 判断商品不存在则自动删除
-            if (!isset($sourceData[$item['project_id']])) {
-                $this->delete($key);
-                continue;
-            }
-            // 项目信息
-            $project = clone $sourceData[$item['project_id']];
-            // 判断商品是否已删除
-            if (empty($project)) {
-                $this->delete($key);
-                continue;
-            }
-
-            // 购买数量
-            $project['total_num'] = $item['total_num'];
-            // 总价
-            $project['total_price'] = bcmul($project['price'], $item['total_num'], 2);
-            // 总佣金
-            $project['total_money'] = bcmul($project['money'], $item['total_num'], 2);
-            // 供应商
-            $project['shop_supplier_id'] = $item['shop_supplier_id'];
-            //购物车id
-            $project['cart_id'] = $item['cart_id'];
-            $projectList[] = $project;
-        }
-
-        $supplierIds = array_unique(helper::getArrayColumn($projectList, 'shop_supplier_id'));
-        foreach($supplierIds as $supplierId){
-            $supplierData[] = [
-                'shop_supplier_id' => $supplierId,
-                'supplier' => SupplierModel::detail($supplierId),
-                'projectList' => $this->getProjectBySupplier($supplierId, $projectList)
-            ];
-        }
-        return $supplierData;
-    }
-
-    private function getProjectBySupplier($supplierId, $projectList)
-    {
-        $result = [];
-        foreach ($projectList as $project){
-            if($project['shop_supplier_id'] == $supplierId){
-                array_push($result, $project);
-            }
-        }
-        return $result;
-    }
-
-    /**
-     * 加入购物车
-     */
-    public function add($user, $projectId, $projectNum)
-    {
-        $model = $this;
-        // 获取信息
-        $project = ProjectModel::detail($projectId);
-
-        // 获取商品购物车信息
-        $cartDetail = $model->where('user_id', '=', $user['user_id'])
-            ->where('project_id', '=', $projectId)
-            ->find();
-        // 验证能否加入
-        if (!$project_price = $this->checkProject($project)) {
-            return false;
-        }
-
-        // 记录到购物车列表
-        if ($cartDetail) {
-            return $cartDetail->save(['total_num' => $cartDetail['total_num'] + $projectNum]);
-        } else {
-            return $this->save([
-                'user_id' => $user['user_id'],
-                'project_id' => $projectId,
-                'total_num' => $projectNum,
-                'join_price' => $project_price,
-                'shop_supplier_id' => $project['shop_supplier_id'],
-                'app_id' => self::$app_id,
-            ]);
-        }
-    }
-
-    /**
-     * 验证是否可以下单
-     */
-    private function checkProject($project)
-    {
-        // 判断项目
-        if (!$project) {
-            $this->setError('很抱歉,信息不存在');
-            return false;
-        }
-
-        return $project['price'];
-    }
-
-    /**
-     * 减少购物车中某商品数量
-     */
-    public function sub($user, $projectId)
-    {
-        $cartDetail = $this->where('user_id', '=', $user['user_id'])
-            ->where('project_id', '=', $projectId)
-            ->find();
-        if ($cartDetail['total_num'] <= 1) {
-            return $cartDetail->delete();
-        } else {
-            $cartDetail->save(['total_num' => $cartDetail['total_num'] - 1]);
-        }
-    }
-
-    /**
-     * 删除购物车中指定商品
-     * @param string $cartIds (支持字符串ID集)
-     */
-    public function setDelete($user, $cart_id)
-    {
-        return $this->where('user_id', '=', $user['user_id'])->where('cart_id', 'in', explode(',', $cart_id))->delete();
-    }
-
-    /**
-     * 获取当前用户购物车商品总数量(含件数)
-     */
-    public function getTotalNum($user)
-    {
-        $num = $this->where('user_id', '=', $user['user_id'])->sum('total_num');
-        return $num ? $num : 0;
-    }
-
-    /**
-     * 获取当前用户购物车商品总数量(不含件数)
-     */
-    public function getProductNum($user)
-    {
-        return $this->where('user_id', '=', $user['user_id'])->count();
-    }
-
-    /**
-     * 清空当前用户购物车
-     */
-    public function clearAll($user, $cartIds)
-    {
-        return $this->where('user_id', '=', $user['user_id'])
-            ->where('cart_id', 'in', explode(',', $cartIds))
-            ->delete();
-    }
-
-    /**
-     * 设置错误信息
-     */
-    private function setError($error)
-    {
-        empty($this->error) && $this->error = $error;
-    }
-
-    /**
-     * 获取错误信息
-     */
-    public function getError()
-    {
-        return $this->error;
-    }
-
-}
\ No newline at end of file
diff --git a/admin/app/common/model/release/Cash.php b/admin/app/common/model/release/Cash.php
deleted file mode 100644
index 0e9133e..0000000
--- a/admin/app/common/model/release/Cash.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-namespace app\common\model\plus\release;
-
-use app\common\model\BaseModel;
-
-/**
- * 分销商提现明细模型
- */
-class Cash extends BaseModel
-{
-    protected $name = 'release_cash';
-    protected $pk = 'id';
-
-    /**
-     * 打款方式
-     * @var array
-     */
-    public $payType = [
-        10 => '微信',
-        20 => '支付宝',
-        30 => '银行卡',
-    ];
-
-    /**
-     * 申请状态
-     * @var array
-     */
-    public $applyStatus = [
-        10 => '待审核',
-        20 => '审核通过',
-        30 => '驳回',
-        40 => '已打款',
-    ];
-
-    /**
-     * 关联用户表
-     * @return \think\model\relation\BelongsTo
-     */
-    public function user()
-    {
-        return $this->belongsTo('SupplyUser');
-    }
-
-    /**
-     * 提现详情
-     */
-    public static function detail($id)
-    {
-        return (new static())->find($id);
-    }
-
-    /**
-     * 审核状态
-     * @param $value
-     * @return array
-     */
-    public function getApplyStatusAttr($value)
-    {
-        $method = [10 => '待审核', 20 => '审核通过', 30 => '驳回', 40 => '已打款'];
-        return ['text' => $method[$value], 'value' => $value];
-    }
-
-}
\ No newline at end of file
diff --git a/admin/app/common/model/release/DemandApply.php b/admin/app/common/model/release/DemandApply.php
deleted file mode 100644
index d9bb4a4..0000000
--- a/admin/app/common/model/release/DemandApply.php
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-
-namespace app\common\model\plus\release;
-
-use app\common\model\BaseModel;
-use app\common\model\user\User as UserModel;
-
-/**
- * 分销商申请模型
- */
-class DemandApply extends BaseModel
-{
-    protected $name = 'release_demand_apply';
-    protected $pk = 'apply_id';
-
-    /**
-     * 申请状态
-     * @var array
-     */
-    public $applyStatus = [
-        10 => '待审核',
-        20 => '审核通过',
-        30 => '驳回',
-    ];
-
-    /**
-     * 申请时间
-     * @param $value
-     * @return false|string
-     */
-    public function getApplyTimeAttr($value)
-    {
-        return date('Y-m-d H:i:s', $value);
-    }
-
-    /**
-     * 审核时间
-     * @param $value
-     * @return false|int|string
-     */
-    public function getAuditTimeAttr($value)
-    {
-        return $value > 0 ? date('Y-m-d H:i:s', $value) : 0;
-    }
-
-    /**
-     * 销商申请记录详情
-     * @param $where
-     * @return array|\think\Model|null
-     * @throws \think\db\exception\DataNotFoundException
-     * @throws \think\db\exception\DbException
-     * @throws \think\db\exception\ModelNotFoundException
-     */
-    public static function detail($where)
-    {
-        $filter = is_array($where) ? $where : ['apply_id' => $where];
-        return (new static())->where($filter)->find();
-    }
-
-    /**
-     * 审核状态
-     * @param $value
-     * @return array
-     */
-    public function getApplyStatusAttr($value)
-    {
-        $method = [10 => '待审核', 20 => '审核通过', '30' => '驳回'];
-        return ['text' => $method[$value], 'value' => $value];
-    }
-
-    /**
-     * 审核方式
-     * @param $value
-     * @return array
-     */
-    public function getApplyTypeAttr($value)
-    {
-        $method = [10 => '后台审核', 20 => '无需审核'];
-        return ['text' => $method[$value], 'value' => $value];
-    }
-
-}
\ No newline at end of file
diff --git a/admin/app/common/model/release/DemandProject.php b/admin/app/common/model/release/DemandProject.php
deleted file mode 100644
index 8cbc59f..0000000
--- a/admin/app/common/model/release/DemandProject.php
+++ /dev/null
@@ -1,157 +0,0 @@
-<?php
-
-namespace app\api\model\plus\release;
-
-use app\common\model\plus\release\Project as ProjectModel;
-use app\common\model\plus\release\ReleaseProjectImage as ReleaseProjectImageModel;
-
-
-/**
- * 模型
- */
-class DemandProject extends ProjectModel
-{
-    /**
-     * 获取提现明细
-     */
-    public function getList($user_id, $postdata)
-    {
-        $model = $this;
-        if(!empty($postdata["keyword"])){
-            $model = $model->where('name', 'like', '%'.$postdata["keyword"].'%');
-        }
-        return $model->where('is_delete', '=', 0)
-            ->where('project_type', '=', 0)
-            ->where('user_id', '=', $user_id)
-            ->order(['create_time' => 'desc'])
-            ->paginate($postdata);
-    }
-    /**
-     * 新增记录
-     */
-    public function add($postdata,$demand)
-    {
-        $data = json_decode($postdata["formData"],true);
-        if (empty($data['name'])) {
-                $this->error = '请输入标题';
-                return false;
-         }
-        if (empty($data['category_id'])) {
-                $this->error = '请选择分类';
-                return false;
-         }
-        if (empty($data['price'])) {
-                $this->error = '请输入您的预算';
-                return false;
-        }
-       if (empty($data['content'])) {
-                $this->error = '请输入您的详细需求';
-                return false;
-        }
-        
-        $save_data =[
-            'user_id'=>$demand["user_id"],
-            'name'=>$data["name"],
-            'category_id'=>$data["category_id"],
-            'price'=>$data["price"],
-            'content'=>$data["content"],
-            'detail'=>$data["detail"],
-            'show_phone'=>$data["show_phone"],
-            'is_show'=>$data["is_show"],
-            'app_id'=>self::$app_id,
-        ];
-        if(!empty($data["finish_time"]) && $data["finish_time"] != '请选择日期'){
-            $save_data["finish_time"] = strtotime($data["finish_time"]);
-        }else{
-            $save_data["finish_time"] = '';
-        }
-
-          return $this->transaction(function () use ($data, $save_data) {
-            // 记录内容
-            $this->save($save_data);
-            // 记录图片
-            $this->saveAllImages($this['project_id'],$data);
-            
-            return $this['project_id'];
-        });
-    }
-
-    /**
-     * 更新记录
-     */
-    public function edit($postdata)
-    {
-        $data = json_decode($postdata["formData"],true);
-        if (empty($data['name'])) {
-                $this->error = '请输入标题';
-                return false;
-         }
-        if (empty($data['category_id'])) {
-                $this->error = '请选择分类';
-                return false;
-         }
-        if (empty($data['price'])) {
-                $this->error = '请输入您的预算';
-                return false;
-        }
-       if (empty($data['content'])) {
-                $this->error = '请输入您的详细需求';
-                return false;
-        }
-         $save_data =[
-            'name'=>$data["name"],
-            'category_id'=>$data["category_id"],
-            'price'=>$data["price"],
-            'content'=>$data["content"],
-            'detail'=>$data["detail"],
-            'show_phone'=>$data["show_phone"],
-            'is_show'=>$data["is_show"],
-            'status'=>0,
-        ];
-        if(!empty($data["finish_time"]) && $data["finish_time"] != '请选择日期'){
-            $save_data["finish_time"] = strtotime($data["finish_time"]);
-        }else{
-            $save_data["finish_time"] = '';
-        }
-
-        return $this->transaction(function () use ($data, $save_data) {
-            // 记录内容
-            $this->where("project_id","=",$data["project_id"])->save($save_data);
-            // 记录图片
-            $this->saveAllImages($data["project_id"],$data);
-            
-            return true;
-        });
-    }
-     /**
-     * 记录图片
-     */
-    private function saveAllImages($id,$formData)
-    {
-        (new ReleaseProjectImageModel())->where("project_id","=",$id)->delete();
-        // 生成图片数据
-        if(!empty($formData['image_list'])){
-            $imageData = [];
-            foreach ($formData['image_list'] as $imageId) {
-                $imageData[] = [
-                    'project_id' => $id,
-                    'image_id' => !empty($imageId['image_id']) ? $imageId['image_id'] : $imageId['file_id'],
-                    'app_id' => self::$app_id
-                ];
-            }
-            $model = new ReleaseProjectImageModel;
-            return !empty($imageData) && $model->saveAll($imageData);
-        }
-        return true;
-
-    }
-
-    /**
-     * 软删除
-     */
-    public function setDelete($id)
-    {
-        return $this->where("project_id","=",$id)->save(['is_delete' => 1]);
-    }
-
-}
\ No newline at end of file
diff --git a/admin/app/common/model/release/DemandUser.php b/admin/app/common/model/release/DemandUser.php
deleted file mode 100644
index 16e5fd0..0000000
--- a/admin/app/common/model/release/DemandUser.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-
-namespace app\common\model\plus\release;
-
-use app\common\model\BaseModel;
-
-
-/**
- * 用户模型
- */
-class DemandUser extends BaseModel
-{
-    protected $name = 'release_demand_user';
-    protected $pk = 'user_id';
-
-    /**
-     * 关联会员记录表
-     * @return \think\model\relation\BelongsTo
-     */
-    public function user()
-    {
-        return $this->belongsTo('app\\common\\model\\user\\User');
-    }
-
-
-    /**
-     * 详情
-     */
-    public static function detail($user_id, $with = ['user'])
-    {
-        return (new static())->with($with)->find($user_id);
-    }
-
-    /**
-     * 详情
-     */
-    public static function getAll()
-    {
-        return (new static())->where("is_delete","=",0)->select();
-    }
-
-    /**
-     * 是否为需求方
-     */
-    public static function isDemandUser($user_id)
-    {
-        $demand = self::detail($user_id);
-        return !!$demand && !$demand['is_delete'];
-    }
-
-    /**
-     * 新增记录
-     * @param $user_id
-     * @param $data
-     * @return bool
-     */
-    public static function add($user_id, $data)
-    {
-        $model = static::detail($user_id) ?: new static;
-         $model->save(array_merge([
-            'user_id' => $user_id,
-            'is_delete' => 0,
-            'app_id' => $model::$app_id,
-        ], $data));
-        return true;
-    }
-}
\ No newline at end of file
diff --git a/admin/app/common/model/release/Order.php b/admin/app/common/model/release/Order.php
deleted file mode 100644
index 72a5817..0000000
--- a/admin/app/common/model/release/Order.php
+++ /dev/null
@@ -1,109 +0,0 @@
-<?php
-
-namespace app\common\model\plus\release;
-
-use app\common\enum\order\OrderPayTypeEnum;
-use app\common\model\BaseModel;
-
-
-/**
- * 订单模型
- */
-class Order extends BaseModel
-{
-    protected $name = 'release_order';
-    protected $pk = 'id';
-
-    /**
-     * 追加字段
-     * @var string[]
-     */
-    protected $append = [
-        'state_text',
-    ];
-
-    /**
-     * 需求用户
-     * @return \think\model\relation\BelongsTo
-     */
-    public function demanduser()
-    {
-        return $this->belongsTo('app\common\model\user\User','demand_user_id','user_id');
-    }
-
-     /**
-     * 供应用户
-     * @return \think\model\relation\BelongsTo
-     */
-    public function supplyuser()
-    {
-        return $this->belongsTo('app\common\model\user\User','supply_user_id','user_id');
-    }
-
-    /**
-     * 关联项目
-     * @return \think\model\relation\hasMany
-     */
-    public function project()
-    {
-        return $this->belongsTo('app\common\model\plus\release\Project','project_id','project_id');
-    }
-
-
-
-    /**
-     * 订单状态文字描述
-     * @param $value
-     * @param $data
-     * @return string
-     */
-    public function getStateTextAttr($value, $data)
-    {
-        if($data['order_status'] == 20){
-            return '已取消';
-        }
-        // 订单状态
-        if ($data['pay_status'] == 10 && $data['pay_type'] == 40) {
-            return '待确认支付';
-        }else if ($data['pay_status'] == 10 && $data['pay_type'] != 40) {
-            return '未付款';
-        }else if($data['pay_status'] == 20 && $data['order_status'] == 10){
-            return '进行中';
-        }else if($data['pay_status'] == 20 && $data['order_status'] == 30){
-            return '已完成';
-        }
-        return "";
-    }
-
-    /**
-     * 付款状态
-     * @param $value
-     * @return array
-     */
-    public function getPayTypeAttr($value)
-    {
-        if(empty($value)){
-            return ['text' => '', 'value' => 0];
-        }
-        return ['text' => OrderPayTypeEnum::data()[$value]['name'], 'value' => $value];
-    }
-
-    /**
-     * 详情
-     */
-    public static function detail($id)
-    {
-        $model = new static();
-        return $model->with(['demanduser','supplyuser',"project"])->find($id);
-    }
-
-    /**
-     * 详情
-     */
-    public static function getDetail($order_no)
-    {
-        $model = new static();
-        return $model->with(["project"])->where("order_no",'=',$order_no)->find();
-    }
-
-}
diff --git a/admin/app/common/model/release/Project.php b/admin/app/common/model/release/Project.php
deleted file mode 100644
index 7581ba8..0000000
--- a/admin/app/common/model/release/Project.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-namespace app\common\model\plus\release;
-
-use app\common\model\BaseModel;
-
-/**
- * 项目模型
- */
-class Project extends BaseModel
-{
-    protected $name = 'release_project';
-    protected $pk = 'project_id';
-
-
-    /**
-     * 关联上传图片表
-     */
-    public function image()
-    {
-        return $this->hasMany('app\\common\\model\\plus\\release\\ReleaseProjectImage', 'project_id', 'id')->order(['id' => 'asc']);
-    }
-
-    /**
-     * 关联分类
-     * @return \think\model\relation\BelongsTo
-     */
-    public function category()
-    {
-        return $this->belongsTo('app\\common\\model\\plus\\release\\ReleaseCategory','category_id','category_id');
-    }
-
-     /**
-     * 关联
-     * @return \think\model\relation\BelongsTo
-     */
-    public function user()
-    {
-        return $this->belongsTo('app\\common\\model\\user\\User','user_id','user_id');
-    }
-
-
-
-    /**
-     * 关联多标签表
-     */
-    public function tag()
-    {
-        return $this->hasMany('app\\common\\model\\plus\\release\\Tag', 'tag_id', 'tag_id');
-    }
-
-    /**
-     * 获取详情
-     */
-    public static function detail($project_id)
-    {
-        return (new static())->with(['image'])->find($project_id);
-    }
-
-    /**
-     * 获取列表记录
-     */
-    public function getAll()
-    {
-        return $this->where('is_delete', '=', 0)
-            ->field('project_id,name')
-            ->order(['sort' => 'asc', 'create_time' => 'asc'])
-            ->select();
-    }
-}
\ No newline at end of file
diff --git a/admin/app/common/model/release/ReleaseCategory.php b/admin/app/common/model/release/ReleaseCategory.php
deleted file mode 100644
index bce57e6..0000000
--- a/admin/app/common/model/release/ReleaseCategory.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-namespace app\common\model\plus\release;
-
-use think\facade\Cache;
-use app\common\model\BaseModel;
-
-/**
- * 分类模型
- */
-class ReleaseCategory extends BaseModel
-{
-    protected $pk = 'category_id';
-    protected $name = 'release_category';
-
-
-    /**
-     * 详情
-     */
-    public static function detail($category_id)
-    {
-        return (new static())->find($category_id);
-    }
-
-    /**
-     * 所有分类
-     */
-    public static function getALL()
-    {
-        $model = new static;
-        $data = $model->order(['sort' => 'asc', 'create_time' => 'asc'])->select();
-        return $data;
-    }
-
-
-    public function getListByIds($ids)
-    {
-        return $this->field(['category_id', 'name'])->where('category_id', 'in', $ids)->select();
-    }
-
-}
diff --git a/admin/app/common/model/release/ReleaseProjectImage.php b/admin/app/common/model/release/ReleaseProjectImage.php
deleted file mode 100644
index 5c42481..0000000
--- a/admin/app/common/model/release/ReleaseProjectImage.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-namespace app\common\model\plus\release;
-use app\common\model\BaseModel;
-
-/**
- * 图片模型
- */
-class ReleaseProjectImage extends BaseModel
-{
-    protected $name = 'release_project_image';
-    protected $pk = 'id';
-    protected $updateTime = false;
-
-    /**
-     * 关联文件库
-     */
-    public function file()
-    {
-        return $this->belongsTo('app\\common\\model\\file\\UploadFile', 'image_id', 'file_id')
-            ->bind(['file_path', 'file_name', 'file_url']);
-    }
-
-    
-    public static function getImage($project_id)
-    {
-        $model = new static;
-        return $model->with(['file'])
-            ->where('project_id', '=', $project_id)
-            ->select();
-    }
-
-}
diff --git a/admin/app/common/model/release/ReleaseProjectTag.php b/admin/app/common/model/release/ReleaseProjectTag.php
deleted file mode 100644
index 8729225..0000000
--- a/admin/app/common/model/release/ReleaseProjectTag.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-namespace app\common\model\plus\release;
-use app\common\model\BaseModel;
-
-/**
- * 图片模型
- */
-class ReleaseProjectTag extends BaseModel
-{
-    protected $name = 'release_project_tag';
-    protected $pk = 'id';
-    protected $updateTime = false;
-
-    /**
-     * 关联
-     */
-    public function tag()
-    {
-        return $this->belongsTo('app\\common\\model\\plus\\release\\Tag', 'tag_id', 'tag_id')
-            ->bind(['name']);
-    }
-
-    public static function getTagId($project_id)
-    {
-        $model = new static;
-        return $model
-            ->where('project_id', '=', $project_id)
-            ->column("tag_id");
-    }
-    public static function getTagName($project_id)
-    {
-        $model = new static;
-        return $model->with('tag')
-            ->where('project_id', '=', $project_id)
-            ->select();
-    }
-
-    public static function getTagList($project_id)
-    {
-        $model = new static;
-        return $model->with(['tag'])
-            ->where('project_id', '=', $project_id)
-            ->select();
-    }
-
-}
diff --git a/admin/app/common/model/release/Setting.php b/admin/app/common/model/release/Setting.php
deleted file mode 100644
index 7713490..0000000
--- a/admin/app/common/model/release/Setting.php
+++ /dev/null
@@ -1,398 +0,0 @@
-<?php
-
-namespace app\common\model\plus\release;
-
-use app\common\model\BaseModel;
-use think\facade\Cache;
-
-/**
- * 设置模型
- */
-class Setting extends BaseModel
-{
-    protected $name = 'release_setting';
-    protected $createTime = false;
-
-    /**
-     * 转义数组格式
-     * @param $value
-     * @return mixed
-     */
-    public function getValuesAttr($value)
-    {
-        return json_decode($value, true);
-    }
-
-    /**
-     * 转义成json格式
-     * @param $value
-     * @return false|string
-     */
-    public function setValuesAttr($value)
-    {
-        return json_encode($value);
-    }
-
-    /**
-     * 获取指定项设置
-     * @param $key
-     * @param null $app_id
-     * @return array|mixed
-     */
-    public static function getItem($key, $app_id = null)
-    {
-        $data = static::getAll($app_id);
-        return isset($data[$key]) ? $data[$key]['values'] : [];
-    }
-
-    /**
-     * 获取分销商设置
-     */
-    public static function getAll($app_id = null)
-    {
-        $self = new static;
-        is_null($app_id) && $app_id = $self::$app_id;
-        if (!$data = Cache::get('release_setting_' . $app_id)) {
-            $data = array_column($self->select()->toArray(), null, 'key');
-            Cache::tag('cache')->set('release_setting_' . $app_id, $data);
-        }
-        return array_merge_multiple($self->defaultData(), $data);
-    }
-
-    /**
-     * 获取设置项信息
-     */
-    public static function detail($key)
-    {
-        return (new static())->find(compact('key'));
-    }
-
-    /**
-     * 是否开启功能
-     */
-    public static function isOpen($app_id = null)
-    {
-        return static::getItem('basic', $app_id)['is_open'];
-    }
-
-    /**
-     * 页面名称
-     */
-    public static function getAgentTitle($app_id = null)
-    {
-        return static::getItem('words', $app_id)['index']['title']['value'];
-    }
-
-    /**
-     * 默认配置
-     * @return array[]
-     */
-    public function defaultData()
-    {
-        return [
-            'basic' => [
-                'key' => 'basic',
-                'describe' => '基础设置',
-                'values' => [
-                    // 是否开启分销功能
-                    'is_open' => '0',   // 参数值:1开启 0关闭
-                    // 分销层级
-                    'level' => '3', // 参数值:1一级 2二级 3三级
-                    // 分销商内购
-                    'self_buy' => '0',   // 参数值:1开启 0关闭
-                    'commission_type' => '0', // 佣金计算方式 0固定 1循环
-                    'loop_num' => 3, // 循环长度
-                    'buy_again' => '1' // 重复购买是否参与分销
-                ],
-            ],
-            'condition' => [
-                'key' => 'condition',
-                'describe' => '分销商条件',
-                'values' => [
-                    // 成为分销商条件
-                    'become' => '10',   // 参数值:10填写申请信息(需后台审核) 20填写申请信息(无需审核) 30单次消费 40累计消费 50购买指定商品
-                    // 购买指定商品成为分销商 0关闭 1开启
-                    'become__buy_product' => '0',
-                    // 购买指定商品的id集
-                    'become__buy_product_ids' => [],
-                    // 成为下线条件
-                    'downline' => '10',  // 参数值:10首次点击分享链接 20首次下单 30首次付款
-                    //单次消费金额
-                    'one_money' => '0',
-                    //累计消费金额
-                    'total_money' => '0',
-                ]
-            ],
-            'commission' => [
-                'key' => 'commission',
-                'describe' => '佣金设置',
-                'values' => [
-                    // 一级佣金
-                    'first_money' => '0',
-                    // 一级佣金
-                    'second_money' => '0',
-                    // 一级佣金
-                    'third_money' => '0',
-                    'first_loop_money' => [] //循环比例
-                ]
-            ],
-            'settlement' => [
-                'key' => 'settlement',
-                'describe' => '结算',
-                'values' => [
-                    // 提现方式
-                    'pay_type' => [],   // 参数值:10微信支付 20支付宝支付 30银行卡支付
-                    // 微信支付自动打款
-                    'wechat_pay_auto' => '0',       // 微信支付自动打款:1开启 0关闭
-                    // 最低提现额度
-                    'min_money' => '10.00',
-                    // 佣金结算天数
-                    'settle_days' => '10',
-                    // 微信打款方式
-                    'wechat_type' => '0',
-                    'fee_rate' => '0',
-                    'order_rate' => '0',
-                    'explain' => ''
-                ]
-            ],
-            'words' => [
-                'key' => 'words',
-                'describe' => '自定义文字',
-                'values' => [
-                    'index' => [
-                        'title' => [
-                            'default' => '分销中心',
-                            'value' => '分销中心'
-                        ],
-                        'words' => [
-                            'agent' => [
-                                'default' => '分销商',
-                                'value' => '分销商'
-                            ],
-                            'not_agent' => [
-                                'default' => '您还不是分销商',
-                                'value' => '您还不是分销商'
-                            ],
-                            'apply_now' => [
-                                'default' => '立即加入',
-                                'value' => '立即加入'
-                            ],
-                            'referee' => [
-                                'default' => '推荐人',
-                                'value' => '推荐人'
-                            ],
-                            'money' => [
-                                'default' => '可提现佣金',
-                                'value' => '可提现'
-                            ],
-                            'freeze_money' => [
-                                'default' => '待提现佣金',
-                                'value' => '待提现'
-                            ],
-                            'total_money' => [
-                                'default' => '已提现金额',
-                                'value' => '已提现金额'
-                            ],
-                            'cash' => [
-                                'default' => '去提现',
-                                'value' => '去提现'
-                            ],
-                            'referee_code' => [
-                                'default' => '邀请码',
-                                'value' => '邀请码'
-                            ],
-                        ]
-                    ],
-                    'apply' => [
-                        'title' => [
-                            'default' => '申请成为分销商',
-                            'value' => '申请成为分销商'
-                        ],
-                        'words' => [
-                            'title' => [
-                                'default' => '请填写申请信息',
-                                'value' => '请填写申请信息'
-                            ],
-                            'license' => [
-                                'default' => '分销商申请协议',
-                                'value' => '分销商申请协议'
-                            ],
-                            'submit' => [
-                                'default' => '申请成为经销商',
-                                'value' => '申请成为经销商'
-                            ],
-                            'wait_audit' => [
-                                'default' => '您的申请已受理,正在进行信息核验,请耐心等待。',
-                                'value' => '您的申请已受理,正在进行信息核验,请耐心等待。'
-                            ],
-                            'goto_mall' => [
-                                'default' => '去商城逛逛',
-                                'value' => '去商城逛逛'
-                            ],
-                        ]
-                    ],
-                    'order' => [
-                        'title' => [
-                            'default' => '分销订单',
-                            'value' => '分销订单'
-                        ],
-                        'words' => [
-                            'all' => [
-                                'default' => '全部',
-                                'value' => '全部'
-                            ],
-                            'unsettled' => [
-                                'default' => '未结算',
-                                'value' => '未结算'
-                            ],
-                            'settled' => [
-                                'default' => '已结算',
-                                'value' => '已结算'
-                            ],
-                        ]
-                    ],
-                    'team' => [
-                        'title' => [
-                            'default' => '我的团队',
-                            'value' => '我的团队'
-                        ],
-                        'words' => [
-                            'total_team' => [
-                                'default' => '团队总人数',
-                                'value' => '团队总人数'
-                            ],
-                            'first' => [
-                                'default' => '一级团队',
-                                'value' => '一级团队'
-                            ],
-                            'second' => [
-                                'default' => '二级团队',
-                                'value' => '二级团队'
-                            ],
-                            'third' => [
-                                'default' => '三级团队',
-                                'value' => '三级团队'
-                            ],
-                        ]
-                    ],
-                    'cash_list' => [
-                        'title' => [
-                            'default' => '提现明细',
-                            'value' => '提现明细'
-                        ],
-                        'words' => [
-                            'all' => [
-                                'default' => '全部',
-                                'value' => '全部'
-                            ],
-                            'apply_10' => [
-                                'default' => '审核中',
-                                'value' => '审核中'
-                            ],
-                            'apply_20' => [
-                                'default' => '审核通过',
-                                'value' => '审核通过'
-                            ],
-                            'apply_40' => [
-                                'default' => '已打款',
-                                'value' => '已打款'
-                            ],
-                            'apply_30' => [
-                                'default' => '驳回',
-                                'value' => '驳回'
-                            ],
-                        ]
-                    ],
-                    'cash_apply' => [
-                        'title' => [
-                            'default' => '申请提现',
-                            'value' => '申请提现'
-                        ],
-                        'words' => [
-                            'capital' => [
-                                'default' => '可提现佣金',
-                                'value' => '可提现佣金'
-                            ],
-                            'money' => [
-                                'default' => '提现金额',
-                                'value' => '提现金额'
-                            ],
-                            'money_placeholder' => [
-                                'default' => '请输入要提取的金额',
-                                'value' => '请输入要提取的金额'
-                            ],
-                            'min_money' => [
-                                'default' => '最低提现佣金',
-                                'value' => '最低提现佣金'
-                            ],
-                            'submit' => [
-                                'default' => '提交申请',
-                                'value' => '提交申请'
-                            ],
-                        ]
-                    ],
-                    'qrcode' => [
-                        'title' => [
-                            'default' => '推广二维码',
-                            'value' => '推广二维码'
-                        ]
-                    ],
-                ]
-            ],
-            'license' => [
-                'key' => 'license',
-                'describe' => '申请协议',
-                'values' => [
-                    'license' => ''
-                ]
-            ],
-            'background' => [
-                'key' => 'background',
-                'describe' => '页面背景图',
-                'values' => [
-                    // 分销中心首页
-                    'index' => self::$base_url . 'image/agent/agent-bg.jpg',
-                    // 申请成为分销商页
-                    'apply' => self::$base_url . 'image/agent/agent-bg.jpg',
-                    // 申请提现页
-                    'cash_apply' => self::$base_url . 'image/agent/agent-bg.jpg',
-                ],
-            ],
-            'template_msg' => [
-                'key' => 'template_msg',
-                'describe' => '模板消息',
-                'values' => [
-                    'apply_tpl' => '',    // 分销商审核通知
-                    'cash_tpl' => '',    // 提现状态通知
-                ]
-            ],
-            'qrcode' => [
-                'key' => 'template_msg',
-                'describe' => '分销海报',
-                'values' => [
-                    'backdrop' => [
-                        'src' => self::$base_url . 'image/agent/backdrop.jpg',
-                    ],
-                    'nickName' => [
-                        'fontSize' => 14,
-                        'color' => '#000000',
-                        'left' => 150,
-                        'top' => 99
-                    ],
-                    'avatar' => [
-                        'width' => 70,
-                        'style' => 'circle',
-                        'left' => 150,
-                        'top' => 18
-                    ],
-                    'qrcode' => [
-                        'width' => 100,
-                        'style' => 'circle',
-                        'left' => 136,
-                        'top' => 128
-                    ]
-                ],
-            ]
-        ];
-    }
-}
\ No newline at end of file
diff --git a/admin/app/common/model/release/SupplyApply.php b/admin/app/common/model/release/SupplyApply.php
deleted file mode 100644
index ac51e21..0000000
--- a/admin/app/common/model/release/SupplyApply.php
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-
-namespace app\common\model\plus\release;
-
-use app\common\model\BaseModel;
-use app\common\model\user\User as UserModel;
-
-/**
- * 申请模型
- */
-class SupplyApply extends BaseModel
-{
-    protected $name = 'release_supply_apply';
-    protected $pk = 'apply_id';
-
-    /**
-     * 申请状态
-     * @var array
-     */
-    public $applyStatus = [
-        10 => '待审核',
-        20 => '审核通过',
-        30 => '驳回',
-    ];
-
-    /**
-     * 申请时间
-     * @param $value
-     * @return false|string
-     */
-    public function getApplyTimeAttr($value)
-    {
-        return date('Y-m-d H:i:s', $value);
-    }
-
-    /**
-     * 审核时间
-     * @param $value
-     * @return false|int|string
-     */
-    public function getAuditTimeAttr($value)
-    {
-        return $value > 0 ? date('Y-m-d H:i:s', $value) : 0;
-    }
-
-    /**
-     * 销商申请记录详情
-     * @param $where
-     * @return array|\think\Model|null
-     * @throws \think\db\exception\DataNotFoundException
-     * @throws \think\db\exception\DbException
-     * @throws \think\db\exception\ModelNotFoundException
-     */
-    public static function detail($where)
-    {
-        $filter = is_array($where) ? $where : ['apply_id' => $where];
-        return (new static())->where($filter)->find();
-    }
-
-    /**
-     * 审核状态
-     * @param $value
-     * @return array
-     */
-    public function getApplyStatusAttr($value)
-    {
-        $method = [10 => '待审核', 20 => '审核通过', '30' => '驳回'];
-        return ['text' => $method[$value], 'value' => $value];
-    }
-
-    /**
-     * 审核方式
-     * @param $value
-     * @return array
-     */
-    public function getApplyTypeAttr($value)
-    {
-        $method = [10 => '后台审核', 20 => '无需审核'];
-        return ['text' => $method[$value], 'value' => $value];
-    }
-
-}
\ No newline at end of file
diff --git a/admin/app/common/model/release/SupplyProject.php b/admin/app/common/model/release/SupplyProject.php
deleted file mode 100644
index ba90cc3..0000000
--- a/admin/app/common/model/release/SupplyProject.php
+++ /dev/null
@@ -1,186 +0,0 @@
-<?php
-
-namespace app\api\model\plus\release;
-
-use app\common\model\plus\release\Project as ProjectModel;
-use app\common\model\plus\release\ReleaseProjectImage as ReleaseProjectImageModel;
-use app\common\model\plus\release\Tag as TagModel;
-use app\common\model\plus\release\ReleaseProjectTag as ReleaseProjectTagModel;
-
-
-/**
- * 模型
- */
-class SupplyProject extends ProjectModel
-{
-    /**
-     * 获取提现明细
-     */
-    public function getList($user_id, $postdata)
-    {
-        $model = $this;
-        if(!empty($postdata["keyword"])){
-            $model = $model->where('name', 'like', '%'.$postdata["keyword"].'%');
-        }
-        return $model->where('is_delete', '=', 0)
-            ->where('project_type', '=', 1)
-            ->where('user_id', '=', $user_id)
-            ->order(['create_time' => 'desc'])
-            ->paginate($postdata);
-    }
-    /**
-     * 新增记录
-     */
-    public function add($postdata,$supply)
-    {
-        $data = json_decode($postdata["formData"],true);
-        if (empty($data['name'])) {
-                $this->error = '请输入标题';
-                return false;
-         }
-        if (empty($data['category_id'])) {
-                $this->error = '请选择分类';
-                return false;
-         }
-        if (empty($data['price'])) {
-                $this->error = '请输入您的价格';
-                return false;
-        }
-       if (empty($data['content'])) {
-                $this->error = '请输入您的详细描述';
-                return false;
-        }
-        
-        $save_data =[
-            'user_id'=>$supply["user_id"],
-            'name'=>$data["name"],
-            'category_id'=>$data["category_id"],
-            'price'=>$data["price"],
-            'content'=>$data["content"],
-            'detail'=>$data["detail"],
-            'project_type'=>1,
-            'is_show'=>$data["is_show"],
-            'app_id'=>self::$app_id,
-
-        ];
-        if(!empty($data["finish_time"]) && $data["finish_time"] != '请选择日期'){
-            $save_data["finish_time"] = strtotime($data["finish_time"]);
-        }else{
-            $save_data["finish_time"] = '';
-        }
-
-          return $this->transaction(function () use ($data, $save_data) {
-            // 记录内容
-            $this->save($save_data);
-            // 记录图片
-            $this->saveAllImages($this['project_id'],$data);
-            // 记录标签
-            $this->saveTag($this['project_id'],$data);
-            
-            return $this['project_id'];
-        });
-    }
-
-    /**
-     * 更新记录
-     */
-    public function edit($postdata)
-    {
-        $data = json_decode($postdata["formData"],true);
-        if (empty($data['name'])) {
-                $this->error = '请输入标题';
-                return false;
-         }
-        if (empty($data['category_id'])) {
-                $this->error = '请选择分类';
-                return false;
-         }
-        if (empty($data['price'])) {
-                $this->error = '请输入您的价格';
-                return false;
-        }
-       if (empty($data['content'])) {
-                $this->error = '请输入您的详细描述';
-                return false;
-        }
-         $save_data =[
-            'name'=>$data["name"],
-            'category_id'=>$data["category_id"],
-            'price'=>$data["price"],
-            'content'=>$data["content"],
-            'detail'=>$data["detail"],
-            'is_show'=>$data["is_show"],
-            'status'=>0,
-        ];
-        if(!empty($data["finish_time"]) && $data["finish_time"] != '请选择日期'){
-            $save_data["finish_time"] = strtotime($data["finish_time"]);
-        }else{
-            $save_data["finish_time"] = '';
-        }
-
-        return $this->transaction(function () use ($data, $save_data) {
-            // 记录内容
-            $this->where("project_id","=",$data["project_id"])->save($save_data);
-            // 记录图片
-            $this->saveAllImages($data['project_id'],$data);
-            // 记录标签
-            $this->saveTag($data['project_id'],$data);
-            
-            return true;
-        });
-    }
-     /**
-     * 记录图片
-     */
-    private function saveAllImages($id,$formData)
-    {
-        (new ReleaseProjectImageModel())->where("project_id","=",$id)->delete();
-        // 生成图片数据
-        if(!empty($formData['image_list'])){
-            $imageData = [];
-            foreach ($formData['image_list'] as $imageId) {
-                $imageData[] = [
-                    'project_id' => $id,
-                    'image_id' => !empty($imageId['image_id']) ? $imageId['image_id'] : $imageId['file_id'],
-                    'app_id' => self::$app_id
-                ];
-            }
-            $model = new ReleaseProjectImageModel;
-            return !empty($imageData) && $model->saveAll($imageData);
-        }
-        return true;
-
-    }
-
-    /**
-     * 记录标签
-     */
-    private function saveTag($id,$formData)
-    {
-        (new ReleaseProjectTagModel())->where("project_id","=",$id)->delete();
-        // 生成数据
-        if(!empty($formData['tag_list'])){
-            $tagData = [];
-            foreach ($formData['tag_list'] as $val) {
-                $tagData[] = [
-                    'project_id' => $id,
-                    'tag_id' => $val,
-                    'app_id' => self::$app_id
-                ];
-            }
-            $model = new ReleaseProjectTagModel;
-            return !empty($tagData) && $model->saveAll($tagData);
-        }
-        return true;
-
-    }
-
-    /**
-     * 软删除
-     */
-    public function setDelete($id)
-    {
-        return $this->where("project_id","=",$id)->save(['is_delete' => 1]);
-    }
-
-}
\ No newline at end of file
diff --git a/admin/app/common/model/release/SupplyUser.php b/admin/app/common/model/release/SupplyUser.php
deleted file mode 100644
index 2c408ab..0000000
--- a/admin/app/common/model/release/SupplyUser.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-
-namespace app\common\model\plus\release;
-
-use app\common\model\BaseModel;
-
-
-/**
- * 用户模型
- */
-class SupplyUser extends BaseModel
-{
-    protected $name = 'release_supply_user';
-    protected $pk = 'user_id';
-
-    /**
-     * 关联会员记录表
-     * @return \think\model\relation\BelongsTo
-     */
-    public function user()
-    {
-        return $this->belongsTo('app\\common\\model\\user\\User');
-    }
-
-
-    /**
-     * 详情
-     */
-    public static function detail($user_id, $with = ['user'])
-    {
-        return (new static())->with($with)->find($user_id);
-    }
-
-    /**
-     * 详情
-     */
-    public static function getAll()
-    {
-        return (new static())->where("is_delete","=",0)->select();
-    }
-
-    /**
-     * 是否为供应方
-     */
-    public static function isSupplyUser($user_id)
-    {
-        $supply = self::detail($user_id);
-        return !!$supply && !$supply['is_delete'];
-    }
-
-    /**
-     * 新增记录
-     * @param $user_id
-     * @param $data
-     * @return bool
-     */
-    public static function add($user_id, $data)
-    {
-        $model = static::detail($user_id) ?: new static;
-         $model->save(array_merge([
-            'user_id' => $user_id,
-            'is_delete' => 0,
-            'app_id' => $model::$app_id,
-        ], $data));
-        return true;
-    }
-}
\ No newline at end of file
diff --git a/admin/app/common/model/release/Tag.php b/admin/app/common/model/release/Tag.php
deleted file mode 100644
index c3f5a65..0000000
--- a/admin/app/common/model/release/Tag.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace app\common\model\plus\release;
-
-use app\common\model\BaseModel;
-
-/**
- * 项目标签模型
- */
-class Tag extends BaseModel
-{
-    protected $name = 'release_tag';
-    protected $pk = 'tag_id';
-
-
-
-    /**
-     * 获取详情
-     */
-    public static function detail($tag_id)
-    {
-        return (new static())->find($tag_id);
-    }
-
-    /**
-     * 获取列表记录
-     */
-    public static function getAll()
-    {
-        return (new static())->where('is_delete', '=', 0)
-            ->field('tag_id,name')
-            ->order(['sort' => 'asc', 'create_time' => 'asc'])
-            ->select();
-    }
-}
\ No newline at end of file
diff --git a/admin/app/common/model/user/User.php b/admin/app/common/model/user/User.php
index 3199aca..9d1b860 100644
--- a/admin/app/common/model/user/User.php
+++ b/admin/app/common/model/user/User.php
@@ -23,6 +23,15 @@
     protected $pk = 'user_id';
     protected $name = 'user';
 
+    public static function getOperatingSubsidy($referee_id, $setting)
+    {
+        $count=self::where('referee_id',$referee_id)->where('grade_id','in',$setting['referee_grade_ids'])->count();
+        if ($count>=$setting['referee_grade_count']){
+            return true;
+        }
+        return false;
+    }
+
     /**
      * 修改器
      */
diff --git a/admin/app/shop/controller/plus/release/DemandUser.php b/admin/app/shop/controller/plus/release/DemandUser.php
index 1593ccc..33335ae 100644
--- a/admin/app/shop/controller/plus/release/DemandUser.php
+++ b/admin/app/shop/controller/plus/release/DemandUser.php
@@ -4,6 +4,7 @@
 
 use app\shop\controller\Controller;
 use app\shop\model\plus\release\DemandUser as UserModel;
+use app\shop\model\plus\release\Grade;
 
 /**
  * 控制器
@@ -17,7 +18,9 @@
     {
         $model = new UserModel;
         $list = $model->getList($this->postData());
-        return $this->renderSuccess('', compact('list'));
+        $GradeModel = new Grade();
+        $grade = $GradeModel->getLists();
+        return $this->renderSuccess('', compact('list', 'grade'));
     }
 
     /**
diff --git a/admin/app/shop/controller/plus/release/Evaluate.php b/admin/app/shop/controller/plus/release/Evaluate.php
new file mode 100644
index 0000000..c9c058c
--- /dev/null
+++ b/admin/app/shop/controller/plus/release/Evaluate.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace app\shop\controller\plus\release;
+
+use app\shop\controller\Controller;
+use app\shop\model\plus\release\Evaluate as EvaluateModel;
+
+/**
+ * 项目
+ */
+class Evaluate extends Controller
+{
+    /**
+     * 列表
+     */
+    public function list()
+    {
+        $model = new EvaluateModel;
+        $list = $model->getList($this->postData());
+        return $this->renderSuccess('', compact('list'));
+    }
+
+    /**
+     * 删除
+     */
+    public function delete($id)
+    {
+        // 详情
+        $model = EvaluateModel::detail($id);
+        if (!$model->setDelete()) {
+            return $this->renderError('删除失败');
+        }
+        return $this->renderSuccess('删除成功');
+    }
+}
\ No newline at end of file
diff --git a/admin/app/shop/controller/plus/release/Grade.php b/admin/app/shop/controller/plus/release/Grade.php
new file mode 100644
index 0000000..eff8f75
--- /dev/null
+++ b/admin/app/shop/controller/plus/release/Grade.php
@@ -0,0 +1,61 @@
+<?php
+
+namespace app\shop\controller\plus\release;
+
+use app\shop\controller\Controller;
+use app\shop\model\plus\release\Grade as GradeModel;
+
+/**
+ * 等级
+ */
+class Grade extends Controller
+{
+    /**
+     * 等级列表
+     */
+    public function index()
+    {
+        $model = new GradeModel;
+        $list = $model->getList($this->postData());
+        return $this->renderSuccess('', compact('list'));
+    }
+
+    /**
+     * 添加等级
+     */
+    public function add()
+    {
+        $model = new GradeModel;
+        // 新增记录
+        if ($model->add($this->postData())) {
+            return $this->renderSuccess('添加成功');
+        }
+        return $this->renderError('添加失败');
+    }
+
+    /**
+     * 编辑等级
+     */
+    public function edit($grade_id)
+    {
+        $model = GradeModel::detail($grade_id);
+        // 修改记录
+        if ($model->edit($this->postData())) {
+            return $this->renderSuccess();
+        }
+        return $this->renderError();
+    }
+
+    /**
+     * 删除等级
+     */
+    public function delete($grade_id)
+    {
+        // 等级详情
+        $model = GradeModel::detail($grade_id);
+        if (!$model->setDelete()) {
+            return $this->renderError('删除失败');
+        }
+        return $this->renderSuccess('删除成功');
+    }
+}
\ No newline at end of file
diff --git a/admin/app/shop/controller/plus/release/SupplyUser.php b/admin/app/shop/controller/plus/release/SupplyUser.php
index 6758a84..5377995 100644
--- a/admin/app/shop/controller/plus/release/SupplyUser.php
+++ b/admin/app/shop/controller/plus/release/SupplyUser.php
@@ -4,6 +4,7 @@
 
 use app\shop\controller\Controller;
 use app\shop\model\plus\release\SupplyUser as UserModel;
+use app\shop\model\plus\release\Grade;
 
 /**
  * 控制器
@@ -17,7 +18,9 @@
     {
         $model = new UserModel;
         $list = $model->getList($this->postData());
-        return $this->renderSuccess('', compact('list'));
+        $GradeModel = new Grade();
+        $grade = $GradeModel->getLists();
+        return $this->renderSuccess('', compact('list', 'grade'));
     }
 
     /**
diff --git a/admin/app/shop/model/plus/release/DemandProject.php b/admin/app/shop/model/plus/release/DemandProject.php
index cb33b5d..255164b 100644
--- a/admin/app/shop/model/plus/release/DemandProject.php
+++ b/admin/app/shop/model/plus/release/DemandProject.php
@@ -20,9 +20,9 @@
         if (!empty($data['name'])) {
             $model = $model->where('name', 'like', '%' . $data['name'] . '%');
         }
-        $list = $model->with('category')->where('project_type', '=', 0)
+        $list = $model->with(['category','user'])->where('project_type', '=', 0)
             ->where('is_delete', '=', 0)
-            ->order(['sort' => 'asc', 'create_time' => 'asc'])
+            ->order(['sort' => 'asc', 'create_time' => 'desc'])
             ->paginate($data);
         foreach($list as &$val){
             $val['finish_time'] = empty($val["finish_time"]) ? '' : date('Y-m-d',$val["finish_time"]);
diff --git a/admin/app/shop/model/plus/release/DemandUser.php b/admin/app/shop/model/plus/release/DemandUser.php
index 4b385b8..f0f0cba 100644
--- a/admin/app/shop/model/plus/release/DemandUser.php
+++ b/admin/app/shop/model/plus/release/DemandUser.php
@@ -19,7 +19,7 @@
     public function getList($data)
     {
         // 构建查询规则
-        $model = $this->alias('du')
+        $model = $this->alias('du')->with('grade')
             ->field('du.*, user.nickName, user.avatarUrl')
             ->join('user', 'user.user_id = du.user_id')
             ->where('du.is_delete', '=', 0)
diff --git a/admin/app/shop/model/plus/release/Evaluate.php b/admin/app/shop/model/plus/release/Evaluate.php
new file mode 100644
index 0000000..7211b0f
--- /dev/null
+++ b/admin/app/shop/model/plus/release/Evaluate.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace app\shop\model\plus\release;
+
+use app\common\model\plus\release\Evaluate as EvaluateModel;
+
+/**
+ * 模型
+ */
+class Evaluate extends EvaluateModel
+{
+    /**
+     * 获取列表记录
+     */
+    public function getList($data)
+    {
+        $model = $this;
+        // 查询条件
+        if (!empty($data['uid'])) {
+            $model = $model->where('uid', '=', $data['uid']);
+        }
+        $list = $model->with(['user'])
+            ->where('project_id','=',$data['project_id'])
+            ->order(['create_time' => 'desc'])
+            ->paginate($data);
+        foreach($list as &$val){
+            $score = "好评";
+            if($val['score']==20){
+                $score = "重评";
+            }elseif($val['score']==30){
+                $score = "差评";
+            }
+            $val['score_txt'] = $score;
+        }    
+        return $list;
+    }
+
+     /**
+     * 删除
+     */
+    public function setDelete()
+    {
+        return $this->where('id','=',$this['id'])->delete();
+    }
+}
\ No newline at end of file
diff --git a/admin/app/shop/model/plus/release/Grade.php b/admin/app/shop/model/plus/release/Grade.php
new file mode 100644
index 0000000..8d4a339
--- /dev/null
+++ b/admin/app/shop/model/plus/release/Grade.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace app\shop\model\plus\release;
+
+use app\common\model\plus\release\Grade as GradeModel;
+
+/**
+ * 用户会员等级模型
+ */
+class Grade extends GradeModel
+{
+    /**
+     * 获取列表记录
+     */
+    public function getList($data)
+    {
+        return $this->where('is_delete', '=', 0)
+            ->order(['weight' => 'asc', 'create_time' => 'asc'])
+            ->paginate($data);
+    }
+
+
+
+
+    /**
+     * 新增记录
+     */
+    public function add($data)
+    {
+        $data['app_id'] = self::$app_id;
+        return $this->save($data);
+    }
+
+    /**
+     * 编辑记录
+     */
+    public function edit($data)
+    {
+        return $this->save($data);
+    }
+
+
+    /**
+     * 软删除
+     */
+    public function setDelete()
+    {
+   
+        return $this->save(['is_delete' => 1]);
+    }
+
+}
\ No newline at end of file
diff --git a/admin/app/shop/model/plus/release/SupplyProject.php b/admin/app/shop/model/plus/release/SupplyProject.php
index e3916ff..2bab6d1 100644
--- a/admin/app/shop/model/plus/release/SupplyProject.php
+++ b/admin/app/shop/model/plus/release/SupplyProject.php
@@ -21,9 +21,9 @@
         if (!empty($data['name'])) {
             $model = $model->where('name', 'like', '%' . $data['name'] . '%');
         }
-        $list= $model->with('category')->where('project_type', '=', 1)
+        $list= $model->with(['category','user'])->where('project_type', '=', 1)
             ->where('is_delete', '=', 0)
-            ->order(['sort' => 'asc', 'create_time' => 'asc'])
+            ->order(['sort' => 'asc', 'create_time' => 'desc'])
             ->paginate($data);
 
         foreach($list as &$val){
diff --git a/admin/app/shop/model/plus/release/SupplyUser.php b/admin/app/shop/model/plus/release/SupplyUser.php
index 08a8f8f..43136a2 100644
--- a/admin/app/shop/model/plus/release/SupplyUser.php
+++ b/admin/app/shop/model/plus/release/SupplyUser.php
@@ -19,7 +19,7 @@
     public function getList($data)
     {
         // 构建查询规则
-        $model = $this->alias('su')
+        $model = $this->alias('su')->with('grade')
             ->field('su.*, user.nickName, user.avatarUrl')
             ->join('user', 'user.user_id = su.user_id')
             ->where('su.is_delete', '=', 0)
diff --git a/admin/app/supplier/controller/plus/release/Cash.php b/admin/app/supplier/controller/plus/release/Cash.php
new file mode 100644
index 0000000..21e2e78
--- /dev/null
+++ b/admin/app/supplier/controller/plus/release/Cash.php
@@ -0,0 +1,85 @@
+<?php
+
+namespace app\supplier\controller\plus\release;
+
+use app\supplier\controller\Controller;
+use app\shop\model\plus\release\Cash as CashModel;
+use app\supplier\model\supplier\Supplier as SupplierModel;
+
+/**
+ * 提现申请制器
+ */
+class Cash extends Controller
+{
+    /**
+     * 提现记录列表
+     */
+    public function index($user_id = null, $apply_status = -1, $pay_type = -1, $search = '')
+    {
+        $supplier = SupplierModel::detail($this->getSupplierId());
+        if(empty($supplier["is_release"])){
+            return $this->renderError('没有权限');
+        }
+        $model = new CashModel;
+        $list = $model->getList($user_id, $apply_status, $pay_type, $search);
+        return $this->renderSuccess('', compact('list'));
+    }
+
+    /**
+     * 提现审核
+     */
+    public function submit($id)
+    {
+        $model = CashModel::detail($id);
+        if ($model->submit($this->postData())) {
+            return $this->renderSuccess('操作成功');
+        }
+        return $this->renderError($model->getError() ?: '操作失败');
+    }
+
+    /**
+     * 确认打款
+     */
+    public function money($id)
+    {
+        $model = CashModel::detail($id);
+
+        if ($model->money()) {
+            return $this->renderSuccess('操作成功');
+        }
+        return $this->renderError($model->getError() ?: '操作失败');
+    }
+
+    /**
+     * 分销商提现:微信支付企业付款
+     */
+    public function wechat_pay($id)
+    {
+        $model = CashModel::detail($id);
+        if ($model->wechatPay()) {
+            return $this->renderSuccess('操作成功');
+        }
+        return $this->renderError($model->getError() ?: '操作失败');
+    }
+
+    /**
+     * 分销商提现:分账功能 by yj
+     */
+    public function fb_pay($id)
+    {
+        $model = CashModel::detail($id);
+        if ($model->fbPay()) {
+            return $this->renderSuccess('操作成功');
+        }
+        return $this->renderError($model->getError() ?: '操作失败');
+    }
+
+    /**
+     * 订单导出
+     */
+    public function export($user_id = null, $apply_status = -1, $pay_type = -1, $search = '')
+    {
+        $model = new CashModel();
+        return $model->exportList($user_id, $apply_status, $pay_type, $search);
+    }
+}
\ No newline at end of file
diff --git a/admin/app/supplier/controller/plus/release/DemandApply.php b/admin/app/supplier/controller/plus/release/DemandApply.php
new file mode 100644
index 0000000..7f0774f
--- /dev/null
+++ b/admin/app/supplier/controller/plus/release/DemandApply.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace app\supplier\controller\plus\release;
+
+use app\supplier\controller\Controller;
+use app\shop\model\plus\release\DemandApply as ApplyModel;
+use app\supplier\model\supplier\Supplier as SupplierModel;
+
+/**
+ * 控制器
+ */
+class DemandApply extends Controller
+{
+
+    /**
+     * 申请列表
+     */
+    public function index()
+    {
+        $supplier = SupplierModel::detail($this->getSupplierId());
+        if(empty($supplier["is_release"])){
+            return $this->renderError('没有权限');
+        }
+        $model = new ApplyModel;
+        $apply_list = $model->getList($this->postData());
+        return $this->renderSuccess('', compact('apply_list'));
+    }
+
+    /**
+     * 审核分销商
+     */
+    public function editApplyStatus($apply_id)
+    {
+        $model = ApplyModel::detail($apply_id);
+        if ($model->submit($this->postData())) {
+            return $this->renderSuccess('修改成功');
+        }
+        return $this->renderError('修改失败');
+
+    }
+
+
+}
\ No newline at end of file
diff --git a/admin/app/supplier/controller/plus/release/DemandProject.php b/admin/app/supplier/controller/plus/release/DemandProject.php
new file mode 100644
index 0000000..5697d66
--- /dev/null
+++ b/admin/app/supplier/controller/plus/release/DemandProject.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace app\supplier\controller\plus\release;
+
+use app\supplier\controller\Controller;
+use app\shop\model\plus\release\DemandProject as ProjectModel;
+use app\supplier\model\supplier\Supplier as SupplierModel;
+
+/**
+ * 项目
+ */
+class DemandProject extends Controller
+{
+    /**
+     * 列表
+     */
+    public function index()
+    {
+        $supplier = SupplierModel::detail($this->getSupplierId());
+        if(empty($supplier["is_release"])){
+            return $this->renderError('没有权限');
+        }
+        $model = new ProjectModel;
+        $list = $model->getList($this->postData());
+        return $this->renderSuccess('', compact('list'));
+    }
+
+    /**
+     * 审核
+     */
+    public function submit($project_id)
+    {
+        $model = ProjectModel::detail($project_id);
+        if ($model->submit($this->postData())) {
+            return $this->renderSuccess('操作成功');
+        }
+        return $this->renderError($model->getError() ?: '操作失败');
+    }
+
+
+    /**
+     * 删除
+     */
+    public function delete($project_id)
+    {
+        // 详情
+        $model = ProjectModel::detail($project_id);
+        if (!$model->setDelete()) {
+            return $this->renderError('删除失败');
+        }
+        return $this->renderSuccess('删除成功');
+    }
+
+}
\ No newline at end of file
diff --git a/admin/app/supplier/controller/plus/release/DemandUser.php b/admin/app/supplier/controller/plus/release/DemandUser.php
new file mode 100644
index 0000000..1f642e1
--- /dev/null
+++ b/admin/app/supplier/controller/plus/release/DemandUser.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace app\supplier\controller\plus\release;
+
+use app\supplier\controller\Controller;
+use app\shop\model\plus\release\DemandUser as UserModel;
+use app\shop\model\plus\release\Grade;
+use app\supplier\model\supplier\Supplier as SupplierModel;
+
+/**
+ * 控制器
+ */
+class DemandUser extends Controller
+{
+    /**
+     * 列表
+     */
+    public function index()
+    {
+        $supplier = SupplierModel::detail($this->getSupplierId());
+        if(empty($supplier["is_release"])){
+            return $this->renderError('没有权限');
+        }
+        $model = new UserModel;
+        $list = $model->getList($this->postData());
+        $GradeModel = new Grade();
+        $grade = $GradeModel->getLists();
+        return $this->renderSuccess('', compact('list', 'grade'));
+    }
+
+    /**
+     * 编辑
+     */
+    public function edit()
+    {
+        $user_id = $this->postData('user_id');
+        $model = UserModel::detail($user_id);
+        if ($this->request->isGet()) {
+            return $this->renderSuccess('', compact('model'));
+        }
+        if ($model->edit($this->postData())) {
+            return $this->renderSuccess('更新成功');
+        }
+        return $this->renderError($model->getError() ?: '更新失败');
+    }
+
+    /**
+     * 软删除
+     */
+    public function delete($user_id)
+    {
+        $model = UserModel::detail($user_id);
+        if (!$model->setDelete()) {
+            return $this->renderError('删除失败');
+        }
+        return $this->renderSuccess('删除成功');
+    }
+
+}
\ No newline at end of file
diff --git a/admin/app/supplier/controller/plus/release/Evaluate.php b/admin/app/supplier/controller/plus/release/Evaluate.php
new file mode 100644
index 0000000..3c40dfe
--- /dev/null
+++ b/admin/app/supplier/controller/plus/release/Evaluate.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace app\supplier\controller\plus\release;
+
+use app\supplier\controller\Controller;
+use app\shop\model\plus\release\Evaluate as EvaluateModel;
+use app\supplier\model\supplier\Supplier as SupplierModel;
+
+/**
+ * 项目
+ */
+class Evaluate extends Controller
+{
+    /**
+     * 列表
+     */
+    public function list()
+    {
+        $supplier = SupplierModel::detail($this->getSupplierId());
+        if(empty($supplier["is_release"])){
+            return $this->renderError('没有权限');
+        }
+        $model = new EvaluateModel;
+        $list = $model->getList($this->postData());
+        return $this->renderSuccess('', compact('list'));
+    }
+
+    /**
+     * 删除
+     */
+    public function delete($id)
+    {
+        // 详情
+        $model = EvaluateModel::detail($id);
+        if (!$model->setDelete()) {
+            return $this->renderError('删除失败');
+        }
+        return $this->renderSuccess('删除成功');
+    }
+}
\ No newline at end of file
diff --git a/admin/app/supplier/controller/plus/release/Grade.php b/admin/app/supplier/controller/plus/release/Grade.php
new file mode 100644
index 0000000..ac3ef85
--- /dev/null
+++ b/admin/app/supplier/controller/plus/release/Grade.php
@@ -0,0 +1,66 @@
+<?php
+
+namespace app\supplier\controller\plus\release;
+
+use app\supplier\controller\Controller;
+use app\shop\model\plus\release\Grade as GradeModel;
+use app\supplier\model\supplier\Supplier as SupplierModel;
+
+/**
+ * 等级
+ */
+class Grade extends Controller
+{
+    /**
+     * 等级列表
+     */
+    public function index()
+    {
+        $supplier = SupplierModel::detail($this->getSupplierId());
+        if(empty($supplier["is_release"])){
+            return $this->renderError('没有权限');
+        }
+        $model = new GradeModel;
+        $list = $model->getList($this->postData());
+        return $this->renderSuccess('', compact('list'));
+    }
+
+    /**
+     * 添加等级
+     */
+    public function add()
+    {
+        $model = new GradeModel;
+        // 新增记录
+        if ($model->add($this->postData())) {
+            return $this->renderSuccess('添加成功');
+        }
+        return $this->renderError('添加失败');
+    }
+
+    /**
+     * 编辑等级
+     */
+    public function edit($grade_id)
+    {
+        $model = GradeModel::detail($grade_id);
+        // 修改记录
+        if ($model->edit($this->postData())) {
+            return $this->renderSuccess();
+        }
+        return $this->renderError();
+    }
+
+    /**
+     * 删除等级
+     */
+    public function delete($grade_id)
+    {
+        // 等级详情
+        $model = GradeModel::detail($grade_id);
+        if (!$model->setDelete()) {
+            return $this->renderError('删除失败');
+        }
+        return $this->renderSuccess('删除成功');
+    }
+}
\ No newline at end of file
diff --git a/admin/app/supplier/controller/plus/release/Order.php b/admin/app/supplier/controller/plus/release/Order.php
new file mode 100644
index 0000000..ef631f3
--- /dev/null
+++ b/admin/app/supplier/controller/plus/release/Order.php
@@ -0,0 +1,91 @@
+<?php
+
+namespace app\supplier\controller\plus\release;
+
+use app\supplier\controller\Controller;
+use app\shop\model\plus\release\Order as OrderModel;
+use app\supplier\model\supplier\Supplier as SupplierModel;
+
+
+/**
+ * 订单
+ */
+class Order extends Controller
+{
+
+    /**
+     * 订单列表
+     */
+    public function index()
+    {
+        $supplier = SupplierModel::detail($this->getSupplierId());
+        if(empty($supplier["is_release"])){
+            return $this->renderError('没有权限');
+        }
+        $model = new OrderModel;
+        $list = $model->getList($this->postData());
+        return $this->renderSuccess('', compact('list'));
+    }
+
+    /**
+     * 编辑
+     */
+    public function edit()
+    {
+        $id = $this->postData('id');
+        $model = OrderModel::detail($id);
+        // 修改记录
+        if ($model->edit($this->postData())) {
+            return $this->renderSuccess();
+        }
+        return $this->renderError();
+    }
+
+    /**
+     * 线下支付
+     */
+    public function onCash($id)
+    {
+        // 订单信息
+        $model = OrderModel::detail($id);
+        if ($model->onCash($this->postData())) {
+            return $this->renderSuccess('操作成功');
+        }
+        return $this->renderError($model->getError() ?: '操作失败');
+    }
+
+    /**
+     * 完成订单
+     */
+    public function onFinish($id)
+    {
+        // 订单信息
+        $model = OrderModel::detail($id);
+        if ($model->onFinish($this->postData())) {
+            return $this->renderSuccess('操作成功');
+        }
+        return $this->renderError($model->getError() ?: '操作失败');
+    }
+
+    /**
+     * 审核:用户取消订单
+     */
+    public function onCancel($id)
+    {
+        $model = OrderModel::detail($id);
+        if ($model->confirmCancel($this->postData())) {
+            return $this->renderSuccess('操作成功');
+        }
+        return $this->renderError('操作失败');
+    }
+
+    /**
+     * 订单导出
+     */
+    public function export()
+    {
+        $model = new OrderModel();
+        return $model->exportList($this->postData());
+    }
+
+}
\ No newline at end of file
diff --git a/admin/app/supplier/controller/plus/release/ReleaseCategory.php b/admin/app/supplier/controller/plus/release/ReleaseCategory.php
new file mode 100644
index 0000000..769b4d5
--- /dev/null
+++ b/admin/app/supplier/controller/plus/release/ReleaseCategory.php
@@ -0,0 +1,68 @@
+<?php
+
+namespace app\supplier\controller\plus\release;
+
+use app\supplier\controller\Controller;
+use app\shop\model\plus\release\ReleaseCategory as ReleaseCategoryModel;
+use app\supplier\model\supplier\Supplier as SupplierModel;
+
+/**
+ * 商品分类
+ */
+class ReleaseCategory extends Controller
+{
+    /**
+     * 分类列表
+     */
+    public function index()
+    {
+        $supplier = SupplierModel::detail($this->getSupplierId());
+        if(empty($supplier["is_release"])){
+            return $this->renderError('没有权限');
+        }
+        $model = new ReleaseCategoryModel;
+        $list = $model->getList($this->postData());
+        return $this->renderSuccess('', compact('list'));
+    }
+
+    /**
+     * 删除商品分类
+     */
+    public function delete($category_id)
+    {
+        $model = (new ReleaseCategoryModel())->find($category_id);
+        if ($model->setDelete()) {
+            return $this->renderSuccess('删除成功');
+        }
+        return $this->renderError($model->getError() ?:'删除失败');
+    }
+
+    /**
+     * 添加商品分类
+     */
+    public function add()
+    {
+        $model = new ReleaseCategoryModel;
+        // 新增记录
+        $postData = $this->request->post();
+        if ($model->add($postData)) {
+            return $this->renderSuccess('添加成功');
+        }
+        return $this->renderError($model->getError() ?:'添加失败');
+    }
+
+    /**
+     * 编辑商品分类
+     */
+    public function edit($category_id)
+    {
+        // 模板详情
+        $model = ReleaseCategoryModel::detail($category_id);
+        // 更新记录
+        if ($model->edit($this->request->post())) {
+            return $this->renderSuccess('更新成功');
+        }
+        return $this->renderError($model->getError() ?: '更新失败');
+    }
+
+}
diff --git a/admin/app/supplier/controller/plus/release/Setting.php b/admin/app/supplier/controller/plus/release/Setting.php
new file mode 100644
index 0000000..f9a06bc
--- /dev/null
+++ b/admin/app/supplier/controller/plus/release/Setting.php
@@ -0,0 +1,144 @@
+<?php
+
+namespace app\supplier\controller\plus\release;
+
+
+use app\common\model\settings\Setting as SettingModel;
+use app\supplier\controller\Controller;
+use app\shop\model\plus\release\Setting as ReleaseSettingModel;
+use app\shop\model\product\Product as ProductModel;
+use app\supplier\model\supplier\Supplier as SupplierModel;
+
+/**
+ * 设置控制器
+ */
+class Setting extends Controller
+{
+
+    public $pay_type = [
+        ['id' => '10', 'name' => '微信支付'],
+        ['id' => '20', 'name' => '支付宝'],
+        ['id' => '30', 'name' => '银行卡']
+    ];
+
+    public $pay_type1 = [
+        10 => '微信支付',
+        20 => '支付宝',
+        30 => '银行卡'
+    ];
+
+    /**
+     * 设置
+     */
+    public function index()
+    {
+        $supplier = SupplierModel::detail($this->getSupplierId());
+        if(empty($supplier["is_release"])){
+            return $this->renderError('没有权限');
+        }
+        $pay_type = $this->pay_type;
+        $data = ReleaseSettingModel::getAll();
+        return $this->renderSuccess('', compact('data','pay_type'));
+    }
+
+    /**
+     * 基础信息设置
+     */
+    public function basic()
+    {
+        $param = $this->postData();
+        $data['basic'] = $param;
+        return $this->edit($data);
+    }
+
+    /**
+     * 条件设置
+     */
+    public function condition()
+    {
+        $param = $this->postData();
+        $data['condition'] = $param;
+        return $this->edit($data);
+    }
+
+    /**
+     * 佣金设置
+     */
+    public function commission()
+    {
+        $param = $this->postData();
+        $data['commission'] = $param;
+        return $this->edit($data);
+    }
+
+    /**
+     * 结算设置
+     */
+    public function settlement()
+    {
+        $param = $this->postData('form');
+        $data['settlement'] = $param;
+        return $this->edit($data);
+    }
+
+    /**
+     * 自定义文字设置
+     */
+    public function words()
+    {
+        $param = $this->postData();
+        $data['words'] = $param;
+        return $this->edit($data);
+    }
+
+    /**
+     * 申请协议设置
+     */
+    public function license()
+    {
+        $param = $this->postData();
+        $data['license'] = $param;
+        return $this->edit($data);
+    }
+
+    /**
+     * 页面背景设置
+     */
+    public function background()
+    {
+        $param = $this->postData();
+        $data['background'] = $param;
+        return $this->edit($data);
+    }
+
+    /**
+     * 修改
+     */
+    public function edit($data)
+    {
+        $model = new ReleaseSettingModel;
+        if ($model->edit($data)) {
+            return $this->renderSuccess('更新成功');
+        }
+        return $this->renderError($model->getError() ?: '更新失败');
+    }
+
+
+    /**
+     * 分销海报
+     */
+    public function qrcode()
+    {
+        if (!$this->request->post()) {
+            $data = RepairSettingModel::getItem('qrcode');
+            return $this->renderSuccess('', ['data' => $data]);
+        }
+        $model = new RepairSettingModel;
+        if ($model->edit(['qrcode' => $this->postData('form')])) {
+            return $this->renderSuccess('更新成功');
+        }
+        return $this->renderError($model->getError() ?: '更新失败');
+    }
+
+
+}
\ No newline at end of file
diff --git a/admin/app/supplier/controller/plus/release/SupplyApply.php b/admin/app/supplier/controller/plus/release/SupplyApply.php
new file mode 100644
index 0000000..ced1067
--- /dev/null
+++ b/admin/app/supplier/controller/plus/release/SupplyApply.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace app\supplier\controller\plus\release;
+
+use app\supplier\controller\Controller;
+use app\shop\model\plus\release\SupplyApply as ApplyModel;
+use app\supplier\model\supplier\Supplier as SupplierModel;
+
+/**
+ * 控制器
+ */
+class SupplyApply extends Controller
+{
+
+    /**
+     * 分销商申请列表
+     */
+    public function index()
+    {
+        $supplier = SupplierModel::detail($this->getSupplierId());
+        if(empty($supplier["is_release"])){
+            return $this->renderError('没有权限');
+        }
+        $model = new ApplyModel;
+        $apply_list = $model->getList($this->postData());
+        return $this->renderSuccess('', compact('apply_list'));
+    }
+
+    /**
+     * 审核分销商
+     */
+    public function editApplyStatus($apply_id)
+    {
+        $model = ApplyModel::detail($apply_id);
+        if ($model->submit($this->postData())) {
+            return $this->renderSuccess('修改成功');
+        }
+        return $this->renderError('修改失败');
+
+    }
+
+
+}
\ No newline at end of file
diff --git a/admin/app/supplier/controller/plus/release/SupplyProject.php b/admin/app/supplier/controller/plus/release/SupplyProject.php
new file mode 100644
index 0000000..b8d9316
--- /dev/null
+++ b/admin/app/supplier/controller/plus/release/SupplyProject.php
@@ -0,0 +1,53 @@
+<?php
+
+namespace app\supplier\controller\plus\release;
+
+use app\supplier\controller\Controller;
+use app\shop\model\plus\release\SupplyProject as ProjectModel;
+use app\supplier\model\supplier\Supplier as SupplierModel;
+
+/**
+ * 项目
+ */
+class SupplyProject extends Controller
+{
+    /**
+     * 列表
+     */
+    public function index()
+    {
+        $supplier = SupplierModel::detail($this->getSupplierId());
+        if(empty($supplier["is_release"])){
+            return $this->renderError('没有权限');
+        }
+        $model = new ProjectModel;
+        $list = $model->getList($this->postData());
+        return $this->renderSuccess('', compact('list'));
+    }
+
+/**
+     * 审核
+     */
+    public function submit($project_id)
+    {
+        $model = ProjectModel::detail($project_id);
+        if ($model->submit($this->postData())) {
+            return $this->renderSuccess('操作成功');
+        }
+        return $this->renderError($model->getError() ?: '操作失败');
+    }
+
+    /**
+     * 删除
+     */
+    public function delete($project_id)
+    {
+        // 详情
+        $model = ProjectModel::detail($project_id);
+        if (!$model->setDelete()) {
+            return $this->renderError('删除失败');
+        }
+        return $this->renderSuccess('删除成功');
+    }
+
+}
\ No newline at end of file
diff --git a/admin/app/supplier/controller/plus/release/SupplyUser.php b/admin/app/supplier/controller/plus/release/SupplyUser.php
new file mode 100644
index 0000000..9b430e5
--- /dev/null
+++ b/admin/app/supplier/controller/plus/release/SupplyUser.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace app\supplier\controller\plus\release;
+
+use app\supplier\controller\Controller;
+use app\shop\model\plus\release\SupplyUser as UserModel;
+use app\shop\model\plus\release\Grade;
+use app\supplier\model\supplier\Supplier as SupplierModel;
+
+/**
+ * 控制器
+ */
+class SupplyUser extends Controller
+{
+    /**
+     * 列表
+     */
+    public function index()
+    {
+        $supplier = SupplierModel::detail($this->getSupplierId());
+        if(empty($supplier["is_release"])){
+            return $this->renderError('没有权限');
+        }
+        $model = new UserModel;
+        $list = $model->getList($this->postData());
+        $GradeModel = new Grade();
+        $grade = $GradeModel->getLists();
+        return $this->renderSuccess('', compact('list', 'grade'));
+    }
+
+    /**
+     * 编辑
+     */
+    public function edit()
+    {
+        $user_id = $this->postData('user_id');
+        $model = UserModel::detail($user_id);
+        if ($this->request->isGet()) {
+            return $this->renderSuccess('', compact('model'));
+        }
+        if ($model->edit($this->postData())) {
+            return $this->renderSuccess('更新成功');
+        }
+        return $this->renderError($model->getError() ?: '更新失败');
+    }
+
+    /**
+     * 软删除
+     */
+    public function delete($user_id)
+    {
+        $model = UserModel::detail($user_id);
+        if (!$model->setDelete()) {
+            return $this->renderError('删除失败');
+        }
+        return $this->renderSuccess('删除成功');
+    }
+
+}
\ No newline at end of file
diff --git a/admin/app/supplier/controller/plus/release/Tag.php b/admin/app/supplier/controller/plus/release/Tag.php
new file mode 100644
index 0000000..9e342d4
--- /dev/null
+++ b/admin/app/supplier/controller/plus/release/Tag.php
@@ -0,0 +1,71 @@
+<?php
+
+namespace app\supplier\controller\plus\release;
+
+use app\supplier\controller\Controller;
+use app\shop\model\plus\release\Tag as TagModel;
+use app\supplier\model\supplier\Supplier as SupplierModel;
+
+/**
+ * 标签
+ */
+class Tag extends Controller
+{
+    /**
+     * 列表
+     */
+    public function index()
+    {
+        $supplier = SupplierModel::detail($this->getSupplierId());
+        if(empty($supplier["is_release"])){
+            return $this->renderError('没有权限');
+        }
+        $model = new TagModel;
+        $list = $model->getList($this->postData());
+        return $this->renderSuccess('', compact('list'));
+    }
+
+    /**
+     * 添加
+     */
+    public function add()
+    {
+        $model = new TagModel;
+        // 新增记录
+        if ($model->add($this->postData())) {
+            return $this->renderSuccess('添加成功');
+        }
+        return $this->renderError('添加失败');
+    }
+
+    /**
+     * 编辑
+     */
+    public function edit()
+    {
+        $tag_id = $this->postData('tag_id');
+        $model = TagModel::detail($tag_id);
+        if($this->request->isGet()){
+            return $this->renderSuccess('', compact( 'model'));
+        }
+        // 修改记录
+        if ($model->edit($this->postData())) {
+            return $this->renderSuccess();
+        }
+        return $this->renderError();
+    }
+
+    /**
+     * 删除
+     */
+    public function delete($tag_id)
+    {
+        // 详情
+        $model = TagModel::detail($tag_id);
+        if (!$model->setDelete()) {
+            return $this->renderError('删除失败');
+        }
+        return $this->renderSuccess('删除成功');
+    }
+
+}
\ No newline at end of file
diff --git a/mobile/pages.json b/mobile/pages.json
index d2dcc84..a2b71e9 100644
--- a/mobile/pages.json
+++ b/mobile/pages.json
@@ -2311,6 +2311,27 @@
 						"navigationBarTitleText": "提现明细",
 						"enablePullDownRefresh": false
 					}
+				},
+				{
+					"path": "release/chat/chat",
+					"style": {
+						"navigationBarTitleText": "聊天信息",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "release/chat/chat_list",
+					"style": {
+						"navigationBarTitleText": "聊天列表",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "release/project/look-evaluate/look-evaluate",
+					"style": {
+						"navigationBarTitleText": "评论列表",
+						"enablePullDownRefresh": false
+					}
 				}
 			]
 		}
diff --git a/mobile/pages/branch/admin/activity/user.vue b/mobile/pages/branch/admin/activity/user.vue
index f3e4941..212c4f5 100644
--- a/mobile/pages/branch/admin/activity/user.vue
+++ b/mobile/pages/branch/admin/activity/user.vue
@@ -34,6 +34,7 @@
 							<view class="d-b-c mb16 f28 gray3">姓名:{{ item.real_name }}</view>
 							<view class="d-b-c mb16 f28 gray3">手机号:{{ item.mobile }}</view>
 							<view class="d-b-c mb16 f28 gray3">邀请人:{{ item.recommend_name }}</view>
+							<view class="d-b-c mb16 f28 gray3">所属分会:{{ item.branch.name }}</view>
 							<view class="gray9">报名时间:{{ item.create_time }}</view>
 						</view>
 						<view class="f26">
diff --git a/mobile/pages3/release/chat/chat.vue b/mobile/pages3/release/chat/chat.vue
new file mode 100644
index 0000000..ed4aa0f
--- /dev/null
+++ b/mobile/pages3/release/chat/chat.vue
@@ -0,0 +1,585 @@
+<template>
+	<view class="im_interface">
+		<scroll-view id="scrollview" scroll-y="true" :style="'height: '+scrollviewHigh + 'px'" :scroll-with-animation="true"
+		 :scroll-top="scrollTop" @scrolltoupper='newdata'>
+
+			<view class="im_interface_content" ref='container'>
+				<view :class="item.user_id == user_id?'im_text':'im_text2'" class="m-item" v-for="(item,index) in content_list" :key="index">
+					<image class="avatar" :src="item.user_id != user_id?item.user.avatarUrl:avatarUrl"
+					 mode=""></image>
+					<view>
+						<view class="my_date">{{item.create_time}}</view>
+						<view :class="item.user_id == user_id?'my_content my_text_content':'you_content you_text_content'">
+							{{item.content}}
+						</view>
+					</view>
+				</view>
+			</view>
+			<view style="width: 100%;height: 130rpx;"></view>
+		</scroll-view>
+
+		<view class="buttom" :style="'bottom:' +inputBottom+'px;'">
+			<input type="text" v-model="content" @confirm="send_content()" confirm-type="send" @focus="inputFocus" @blur="inputBlur"
+			 :adjust-position="false" placeholder="请输入....." />
+			<view class="upload_box">
+				<button @click="send_content()">发送</button>
+			</view>
+		</view>
+
+		<Upload v-if="isupload" :isupload="isupload" :type="type" @getImgs="getImgsFunc">上传图片</Upload>
+	</view>
+</template>
+
+<script>
+	import Upload from '@/components/upload/upload';
+	export default {
+		data() {
+			return {
+				user_id: '', //我的user_id
+				you_user_id: '', //对方的suser_id
+				myavatarUrl: '',
+				avatarUrl: '',
+				phoneHeight: 0,
+				/*可滚动视图区域高度*/
+				scrollviewHigh: 0,
+				content: '', //用户输入的内容
+				content_list: [], //聊天信息数据
+				style: {
+					pageHeight: 0,
+					contentViewHeight: 0,
+					footViewHeight: 90,
+					mitemHeight: 0
+				},
+				scrollTop: 0,
+				page: 1,
+				nomore: false,
+				scrollHeight: 0,
+				nickName: '',
+				inputBottom: 0,
+				is_Ios: true,
+			}
+		},
+		components: {},
+		created() {
+			let self = this;
+			const res = uni.getSystemInfoSync(); //获取手机可使用窗口高度     api为获取系统信息同步接口
+			this.style.pageHeight = res.windowHeight;
+			this.style.contentViewHeight = res.windowHeight - uni.getSystemInfoSync().screenWidth / 750 * (100) - 70; //像素
+		},
+		onShow() {
+			this.getAvatarUrl();
+			this.init();
+			this.isuserAgent();
+		},
+		onLoad(option) {
+			let self = this;
+			self.you_user_id = option.you_user_id;
+			self.nickName = option.nickname;
+			self.avatarUrl = option.avatarurl;
+			uni.setNavigationBarTitle({
+				title: self.nickName
+			})
+			this.get_content_list();
+		},
+		methods: {
+			/*初始化*/
+			init() {
+				let self = this;
+				uni.getSystemInfo({
+					success(res) {
+						self.phoneHeight = res.windowHeight;
+						// 计算组件的高度
+						self.scrollviewHigh = self.phoneHeight;
+					}
+				});
+			},
+			initData() {
+				this.page++;
+				this.get_content_list();
+			},
+			
+
+			// 发送消息
+			send_content() {
+				if (this.content == '') {
+					uni.showToast({
+						title: '发送内容不能为空!',
+						icon: 'none'
+					})
+					return false
+				}
+				let self = this;
+				let item = {
+					content: this.content,
+					user_id: this.user_id,
+					create_time: self.formatDate(),
+					user: {
+						avatarUrl: self.myavatarUrl
+					}
+				}
+				this.content_list = [...this.content_list, item];
+				this.$nextTick(function() {
+					this.scrollToBottom()
+				})
+				uni.showLoading({
+					title: '加载中'
+				})
+				self._post('plus.release.chat/add', {
+					content: self.content,
+					you_user_id: self.you_user_id,
+				}, (res) => {
+					self.content = '';
+					uni.hideLoading()
+				})
+			},
+			getAvatarUrl() {
+				let self = this;
+				self.user_id = uni.getStorageSync('user_id')
+				self._get(
+					'plus.release.chat/getInfo', {},
+					function(res) {
+						self.myavatarUrl = res.data.info.avatarUrl;
+					}
+				);
+			},
+			
+			//获取聊天记录
+			get_content_list() {
+				let self = this;
+				uni.showLoading({
+					title: '加载中'
+				})
+				self._post('plus.release.chat/message', {
+					//被聊天人的user_id
+					page: self.page,
+					you_user_id: self.you_user_id,
+				}, (res) => {
+					console.log(self.content_list)
+					let list = res.data.list.data.reverse();
+					self.content_list = [...list, ...self.content_list];
+					console.log(self.content_list)
+					if (res.data.list.last_page <= self.page) {
+						self.nomore = true;
+					}
+					if (self.page == 1) {
+						self.$nextTick(() => {
+							self.scrollToBottom();
+						});
+					} else {
+						self.$nextTick(() => {
+							const newquery = uni.createSelectorQuery().in(self);
+							newquery.select('.im_interface_content').boundingClientRect(data => {
+								console.log(data)
+								self.scrollTop = data.height - self.scrollHeight;
+							}).exec();
+						});
+					}
+					uni.hideLoading()
+				})
+			},
+			scrollToBottom: function() {
+				let self = this;
+				let query = uni.createSelectorQuery();
+				query.selectAll('.m-item').boundingClientRect();
+				query.select('#scrollview').boundingClientRect();
+				query.exec((res) => {
+					self.style.mitemHeight = 0;
+					res[0].forEach((rect) => self.style.mitemHeight = self.style.mitemHeight + rect.height +
+						40)
+					setTimeout(() => {
+						if (self.style.mitemHeight > (self.style.contentViewHeight - 100)) {
+							self.scrollTop = self.style.mitemHeight - self.style.contentViewHeight +
+								150
+						}
+					}, 300)
+				})
+			},
+			
+			getJSON(str) {
+				return JSON.parse(str)
+			},
+			newdata() {
+				let self = this;
+				this.page++;
+				const query = uni.createSelectorQuery().in(this);
+				query.select('.im_interface_content').boundingClientRect(data => {
+					this.scrollHeight = data.height;
+				}).exec();
+				this.get_content_list();
+			},
+			inputFocus(e) {
+				this.inputBottom = e.detail.height;
+			},
+			inputBlur() {
+				this.inputBottom = 0;
+			},
+			isuserAgent() {
+				let self = this;
+				switch (uni.getSystemInfoSync().platform) {
+					case 'android':
+						self.is_Ios = false;
+						console.log('运行Android上')
+						break;
+					case 'ios':
+						console.log('运行iOS上')
+						break;
+					default:
+						console.log('运行在开发者工具上')
+						break;
+				}
+			},
+			formatDate() {
+				let date = new Date();
+				let year = date.getFullYear(); // 年
+				let month = date.getMonth() + 1; // 月
+				let day = date.getDate(); // 日
+				let week = date.getDay(); // 星期
+				let weekArr = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
+				let hour = date.getHours(); // 时
+				hour = hour < 10 ? "0" + hour : hour; // 如果只有一位,则前面补零
+				let minute = date.getMinutes(); // 分
+				minute = minute < 10 ? "0" + minute : minute; // 如果只有一位,则前面补零
+				let second = date.getSeconds(); // 秒
+				second = second < 10 ? "0" + second : second; // 如果只有一位,则前面补零
+				return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
+			},
+		}
+	}
+</script>
+
+<style>
+	page {
+		background-color: #EDEDED;
+	}
+
+	.im_interface {
+		width: 750rpx;
+	}
+
+	.im_interface_content {
+		padding: 20rpx 50rpx;
+	}
+
+	.buttom {
+		width: 750rpx;
+		height: 130rpx;
+		background-color: #F7F7F7;
+		border-top: 1px #D2D2D2 solid;
+		display: flex;
+		justify-content: flex-start;
+		align-items: flex-start;
+		position: fixed;
+		bottom: 0;
+		padding-top: 20rpx;
+		box-sizing: border-box;
+	}
+
+	.buttom input {
+		width: 605rpx;
+		height: 75rpx;
+		line-height: 75rpx;
+		background-color: white;
+		display: block;
+		padding: 5rpx;
+		box-sizing: border-box;
+		margin-left: 30rpx;
+		border-radius: 10rpx;
+		vertical-align: middle;
+		position: relative;
+		border: 1rpx solid #CCCCCC;
+
+	}
+
+	.buttom button {
+		width: 125rpx;
+		height: 50rpx;
+		line-height: 200%;
+		display: block;
+		margin: 0 15rpx;
+		vertical-align: middle;
+		position: relative;
+		background-color: #05C160;
+		color: white;
+	}
+
+	.im_text {
+		/* width: 100%; */
+		display: flex;
+		margin-top: 75rpx;
+		flex-direction: row-reverse;
+		position: relative;
+	}
+
+	.im_text2 {
+		/* width: 100%; */
+		display: flex;
+		margin-top: 75rpx;
+		position: relative;
+	}
+
+	.im_text .avatar {
+		width: 84rpx;
+		height: 84rpx;
+		margin-left: 3%;
+		border-radius: 10rpx;
+		background-color: #000000;
+		align-items: flex-start;
+	}
+
+	.im_text2 .avatar {
+		width: 84rpx;
+		height: 84rpx;
+		margin-right: 3%;
+		border-radius: 10rpx;
+		background-color: #000000;
+		align-items: flex-start;
+	}
+
+	.im_text .my_content {
+		max-width: 550rpx;
+		align-items: flex-start;
+		border-radius: 10rpx;
+		padding: 17rpx 20rpx;
+		box-sizing: border-box;
+		word-break: break-all;
+	}
+
+	.im_text2 .my_content {
+		max-width: 450rpx;
+		align-items: flex-start;
+		border-radius: 10rpx;
+		padding: 10rpx;
+		box-sizing: border-box;
+		word-break: break-all;
+	}
+
+	.im_text .you_content {
+		max-width: 450rpx;
+		align-items: flex-start;
+		border-radius: 10rpx;
+		padding: 17rpx 20rpx;
+		box-sizing: border-box;
+	}
+
+	.im_text2 .you_content {
+		max-width: 450rpx;
+		align-items: flex-start;
+		border-radius: 10rpx;
+		padding: 10rpx;
+		box-sizing: border-box;
+	}
+
+	.my_content {
+		background-color: #9EEA6A;
+		margin-top: 25rpx;
+	}
+
+	.you_content {
+		background-color: white;
+		margin-top: 25rpx;
+	}
+
+	.im_icon {
+		position: absolute;
+		bottom: -2rpx;
+		right: 41px;
+		transform: rotate(270deg);
+
+	}
+
+	.im_icon2 {
+		position: absolute;
+		bottom: 0;
+	}
+
+	.im_icon .icon-sanjiao1 {
+		color: #9EEA6A;
+	}
+
+	.im_icon2 .icon-sanjiao1 {
+		position: absolute;
+		bottom: 0;
+	}
+
+	.upload {
+		width: 50rpx;
+		height: 50rpx;
+		background-color: #007AFF;
+		border-radius: 50%;
+		line-height: 50rpx;
+		text-align: center;
+	}
+
+	.cont_img {
+		width: 200rpx;
+		height: 200rpx;
+		border-radius: 10rpx;
+	}
+
+	.top_pro {
+		/* margin-left: 85rpx; */
+	}
+
+	.top_product {
+		width: 610rpx;
+		height: 200rpx;
+		border-radius: 10rpx;
+		margin: 0 auto;
+		display: flex;
+		align-items: flex-start;
+		justify-content: flex-start;
+		background-color: #FFFFFF;
+		padding: 10rpx 20rpx;
+		position: relative;
+	}
+
+	.top_order {
+		width: 610rpx;
+		/* height: 200rpx; */
+		border-radius: 10rpx;
+		margin: 0 auto;
+		display: flex;
+		align-items: flex-start;
+		justify-content: flex-start;
+		background-color: #FFFFFF;
+		padding: 10rpx 20rpx;
+		position: relative;
+	}
+
+	.pro_img {
+		height: 150rpx;
+		width: 150rpx;
+		border-radius: 10rpx;
+		margin-right: 20rpx;
+		background-color: #FFFFFF;
+	}
+
+	.pro_name {
+		font-size: 28rpx;
+		text-overflow: -o-ellipsis-lastline;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		display: -webkit-box;
+		-webkit-line-clamp: 3;
+		line-clamp: 3;
+		-webkit-box-orient: vertical;
+		margin-bottom: 50rpx;
+		width: 400rpx;
+	}
+
+	.pro_price {
+		font-size: 24rpx;
+		color: #E2231A;
+	}
+
+	.pro_btn {
+		position: absolute;
+		bottom: 12rpx;
+		right: 15rpx;
+		width: 180rpx;
+		height: 50rpx;
+		line-height: 50rpx;
+		border-radius: 25rpx;
+		text-align: center;
+		font-size: 24rpx;
+		color: #FFFFFF;
+		background-color: #FF6633;
+	}
+
+	.orderdetail_btn {
+		width: 180rpx;
+		height: 50rpx;
+		line-height: 50rpx;
+		border-radius: 25rpx;
+		text-align: center;
+		font-size: 24rpx;
+		color: #FFFFFF;
+		background-color: #FF6633;
+		margin-left: 270rpx;
+		margin-top: 20rpx;
+	}
+
+	.ord_btn {
+		position: absolute;
+		bottom: 20rpx;
+		right: 15rpx;
+		width: 180rpx;
+		height: 50rpx;
+		line-height: 50rpx;
+		border-radius: 25rpx;
+		text-align: center;
+		font-size: 24rpx;
+		color: #FFFFFF;
+		background-color: #FF6633;
+	}
+
+	.close_pro {
+		position: absolute;
+		top: 12rpx;
+		right: 15rpx;
+	}
+
+	.product_item {
+		width: 400rpx;
+		height: 200rpx;
+	}
+
+	.product_txtitem {
+		display: flex;
+		width: 550rpx;
+		/* height: 150rpx; */
+	}
+
+	.pro_txtname {
+		font-size: 28rpx;
+		text-overflow: -o-ellipsis-lastline;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		display: -webkit-box;
+		-webkit-line-clamp: 1;
+		line-clamp: 1;
+		-webkit-box-orient: vertical;
+		margin-bottom: 50rpx;
+	}
+
+	.my_text_content {
+		/* height: 100%; */
+		max-width: 430rpx;
+	}
+
+	.you_text_content {
+		/* height: 100%; */
+		max-width: 430rpx;
+	}
+
+	.my_date {
+		color: #cccccc;
+		font-size: 24rpx;
+		position: absolute;
+		top: -10rpx;
+	}
+
+	.im_text .my_date {
+		right: 100rpx;
+	}
+
+	.sendpro_price {
+		position: absolute;
+		bottom: 25px;
+	}
+
+	.sendord_price {
+		position: absolute;
+		bottom: 40px;
+	}
+
+	.upload_box {
+		/* width: 50rpx; */
+		height: 75rpx;
+		display: flex;
+		align-items: center;
+		margin-left: 20rpx;
+		justify-content: space-around;
+		flex: 1;
+	}
+</style>
diff --git a/mobile/pages3/release/chat/chat_list.vue b/mobile/pages3/release/chat/chat_list.vue
new file mode 100644
index 0000000..1e23bb6
--- /dev/null
+++ b/mobile/pages3/release/chat/chat_list.vue
@@ -0,0 +1,155 @@
+<template>
+	<view class="im_index">
+		<view class="im_item" v-for="(item,index) in imList" :key="index"
+			@click="jumpPage(item.user)">
+			<view class="im_item_left">
+				<image :src="item.user.avatarUrl" mode=""></image>
+			</view>
+			<view class="im_item_right">
+				<view class="im_item_right_item">
+					<view class="title text-ellipsis">{{item.user.nickName}}</view>
+					<view class="time">{{item.newMessage.create_time}}</view>
+				</view>
+				<view class="im_item_right_item">
+					<view class="content">{{item.newMessage.content}}</view>
+					<view v-if="item.num>0" class="message">{{item.num}}</view>
+				</view>
+			</view>
+		</view>
+		<view class="hint" v-if="imList.length==0">
+			您当前并没有与任何人聊天哦!
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				imList: [],
+			}
+		},
+		onShow() {
+			this.get_im_list();
+		},
+		onLoad() {
+			
+		},
+		methods: {
+			//获取聊天列表
+			get_im_list() {
+				let self = this;
+				self._post('plus.release.chat/index', {
+				}, (res) => {
+					self.imList = res.data.list;
+				})
+			},
+			
+			jumpPage(user) {
+				console.log(user)
+				this.gotoPage('/pages3/release/chat/chat?you_user_id=' + user.user_id + '&avatarurl=' + user.avatarUrl +
+					'&nickname=' + user.nickName);
+			},
+
+
+		}
+	}
+</script>
+
+<style>
+	.im_index {
+		width: 100%;
+	}
+
+	.im_item {
+		width: 90%;
+		height: 120rpx;
+		margin: 0 auto;
+		display: flex;
+		align-items: center;
+	}
+
+	.im_item_left {
+		box-sizing: border-box;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.im_item_left image {
+		width: 80rpx;
+		height: 80rpx;
+		margin: 0 auto;
+		margin-top: 5%;
+		border-radius: 50%;
+		background-color: rgba(0, 0, 0, 0.1);
+	}
+
+	.im_item_right {
+		width: 555rpx;
+		padding: 10rpx;
+		border-bottom: 1px #dcdcdc solid;
+		box-sizing: border-box;
+		display: flex;
+		flex-direction: column;
+	}
+
+	.message {
+		width: 30rpx;
+		height: 30rpx;
+		border-radius: 50%;
+		color: white;
+		background-color: red;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		font-size: 15rpx;
+	}
+
+	.im_item_right_item {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		margin-bottom: 10rpx;
+	}
+
+	.title {
+		font-size: 32rpx;
+	}
+
+
+	.guangfang {
+		font-size: 16rpx;
+		color: #F36A24;
+		border: 1rpx #F36A24 solid;
+		border-radius: 10rpx;
+		padding: 5rpx 10rpx;
+		box-sizing: border-box;
+		position: relative;
+		left: -65rpx;
+	}
+
+	.time {
+		font-size: 26rpx;
+		color: #999999;
+		flex-shrink: 0;
+	}
+
+	.content {
+		font-size: 26rpx;
+		color: #999999;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+		overflow: hidden;
+		word-break: break-all;
+	}
+
+	.hint {
+		width: 750rpx;
+		text-align: center;
+		font-size: 32rpx;
+		color: #585858;
+		margin-top: 20rpx;
+	}
+</style>
diff --git a/mobile/pages3/release/demandindex/index.vue b/mobile/pages3/release/demandindex/index.vue
index 30b2b28..646986b 100644
--- a/mobile/pages3/release/demandindex/index.vue
+++ b/mobile/pages3/release/demandindex/index.vue
@@ -20,12 +20,21 @@
 						<view class="photo">
 							<image :src="user.avatarUrl" mode="aspectFill"></image>
 						</view>
+						<view>
 						<view class="user-name">
 							<view class="gray3 f32">{{ user.nickName }}</view>
 						</view>
-						
+						<view class="gray3 d-s-c mt10">
+							<text class="f28 flex-1 mr20">连盟币:{{user.points}}</text>
+							<view @click="jump">
+								<text>[切换到供应方]</text>
+								<text class="iconfont icon-jiantou"></text>
+							</view>
+						</view> 
+						</view>
 					</view>
 				</view>
+				
 				<!-- <view class="d-s-c p-30-0 top_dash">
 					<view class="flex-1 d-c-c d-c">
 						<view class="redF6">
@@ -54,6 +63,14 @@
 					<button type="primary" class="btn-gcred theme-btn flex-1" @click="gotoPage('/pages3/release/demandproject/index')">发布需求</button>
 				</view>-->
 			</view>
+			
+			<view class="bind_phone" v-if="release.is_check == 0">
+				<view class="bind_content">
+					<view class="bind_txt">您还没有查看信息权限,需{{pay_price}}连盟币开通</view>
+					<button class="bind_btn" @click="topay">去开通</button>
+				</view>
+			</view>
+			
 			<!--图标入口-->
 			<view class="agent-wrap m-0-20 p30 d-s-c f-w mt20 bg-white">
 				<view class="d-c-c d-c flex-1" @click="gotoPage('/pages3/release/project/list?product_type=1')">
@@ -68,12 +85,12 @@
 					</view>
 					<text class="pt10 f26 mt20">发布需求</text>
 				</view>
-				<view class="d-c-c d-c flex-1" @click="gotoPage('/pages3/release/demandorder/index')">
+				<view class="d-c-c d-c flex-1" @click="gotoPage('/pages3/release/chat/chat_list')">
 					<view>
 						<image class="agent_index_img" src="../../../static/icon/icon-zijinmingxi.png" mode=""></image>
 					</view>
-					<text class="pt10 f26 mt20">需求订单</text>
-				</view>
+					<text class="pt10 f26 mt20">私信列表</text>
+				</view> 
 				
 	
 				 <!--<view class="d-c-c d-c flex-1" @click="gotoPage('/pages2/salesman/qrcode/qrcode')">
@@ -118,6 +135,8 @@
 				/*顶部背景*/
 				top_background: '',
 				user:[],
+				setting:[],
+				pay_price:0,
 			};
 		},
 		onLoad(e) {
@@ -138,10 +157,39 @@
 					self.top_background = data.data.background;
 					self.release = data.data.release;
 					self.user = data.data.user;
+					self.setting = data.data.setting;
+					if(self.setting.check_price && self.setting.check_price!= null){
+						self.pay_price = self.setting.check_price;
+					}
 					self.isData = true;
 					self.loadding = false;
 					uni.hideLoading();
 				});
+			},
+			
+			topay() {
+				let self = this;
+				let formData=self.form;
+				uni.showLoading({
+					title: '加载中'
+				});
+				self._post(
+					'plus.release.demandIndex/topay', {
+						pay_source: self.getPlatform(),
+						formData: JSON.stringify(formData),
+					},
+					 function(res) {
+						uni.hideLoading();
+						self.showSuccess(res.msg,function(){
+							self.getData();
+						});
+					}
+				);
+			},
+			
+			/*切换身份*/
+			jump() {
+				this.gotoPage('/pages3/release/supplyindex/index');
 			},
 
 			/*申请入驻*/
@@ -365,4 +413,36 @@
 	.user-info .photo {
 		padding-right: 20rpx;
 	}
+	
+	.bind_phone {
+		width: 100%;
+		height: 80rpx;
+		padding: 0 30rpx;
+		box-sizing: border-box;
+		margin-bottom: 30rpx;
+	}
+	
+	.bind_content {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		background: #ffffff;
+		/* box-shadow: 0 0 6rpx 0 rgba(0, 0, 0, 0.1); */
+		border-radius: 16rpx;
+		height: 100%;
+		padding: 0 20rpx;
+	}
+	
+	.bind_txt {}
+	
+	.bind_btn {
+		width: 134rpx;
+		height: 50rpx;
+		line-height: 50rpx;
+		font-size: 22rpx;
+		border-radius: 25rpx;
+		text-align: center;
+		color: #FFFFFF;
+		background-color: #e2231a;
+	}
 </style>
diff --git a/mobile/pages3/release/demandproject/edit.vue b/mobile/pages3/release/demandproject/edit.vue
index eb7e99e..8471df5 100644
--- a/mobile/pages3/release/demandproject/edit.vue
+++ b/mobile/pages3/release/demandproject/edit.vue
@@ -47,6 +47,14 @@
 					<input class="flex-1" v-model="form.detail" type="text" placeholder-class="grary" placeholder="请输入您的期望地点" />
 				</view>
 				
+				<view class="textarea-box d-s-c f28">
+					<textarea class="p10 box-s-b border flex-1" v-model="form.product_content" placeholder="请输入产品介绍" />
+				</view>
+				
+				<view class="textarea-box d-s-c f28 mt10">
+					<textarea class="p10 box-s-b border flex-1" v-model="form.product_case" placeholder="请输入产品应用案例" />
+				</view>
+				
 				<!-- <view class="form-item border-b">
 					<text class="field-name">需求所在地:</text>
 					<input class="flex-1" name="location_address" type="text"  placeholder-class="grary9" placeholder="请选择地址" v-model="short_address"
@@ -112,6 +120,8 @@
 				project_id:'',
 				image_list:[],
 				content:'',
+				product_content:'',
+				product_case:'',
 				name:'',
 				category_id:'',
 				finish_time:'请选择日期',
diff --git a/mobile/pages3/release/demandproject/release.vue b/mobile/pages3/release/demandproject/release.vue
index 0a7d4d8..1784bf8 100644
--- a/mobile/pages3/release/demandproject/release.vue
+++ b/mobile/pages3/release/demandproject/release.vue
@@ -47,6 +47,14 @@
 					<input class="flex-1" v-model="form.detail" type="text" placeholder-class="grary" placeholder="请输入您的期望地点" />
 				</view>
 				
+				<view class="textarea-box d-s-c f28">
+					<textarea class="p10 box-s-b border flex-1" v-model="form.product_content" placeholder="请输入产品介绍" />
+				</view>
+				
+				<view class="textarea-box d-s-c f28 mt10">
+					<textarea class="p10 box-s-b border flex-1" v-model="form.product_case" placeholder="请输入产品应用案例" />
+				</view>
+				
 				<!-- <view class="form-item border-b">
 					<text class="field-name">需求所在地:</text>
 					<input class="flex-1" name="location_address" type="text"  placeholder-class="grary9" placeholder="请选择地址" v-model="short_address"
@@ -67,6 +75,8 @@
 					</radio-group>
 				</view>
 				
+				
+				
 				<view class="form-item border-b">
 					<view class="field-name">是否展示:</view>
 					<radio-group class="d-s-c" @change="changeShow($event,index)">
@@ -79,6 +89,11 @@
 							<view class="f26 color-57">否</view>
 						</label>
 					</radio-group>
+				</view>
+				
+				<view class="form-item border-b">
+					<view class="field-name">支付金额:</view>
+					<view>{{pay_price}}连盟币</view>
 				</view>
 				
 			</view>
@@ -111,6 +126,8 @@
 			form: {
 				image_list:[],
 				content:'',
+				product_content:'',
+				product_case:'',
 				name:'',
 				category_id:'',
 				finish_time:'请选择日期',
@@ -136,6 +153,8 @@
 			short_address:'',
 			show_phone:1,
 			Address:[],
+			setting:[],
+			pay_price:0,
 		};
 	},
 	onLoad(e){
@@ -189,6 +208,10 @@
 				uni.hideLoading();
 				self.loadding=false;
 				self.categoryList = res.data.category_list;
+				self.setting = res.data.setting;
+				if(self.setting.demand_price && self.setting.demand_price!= null){
+					self.pay_price = self.setting.demand_price;
+				}
 				var list = [];
 				list.push("请选择分类");
 				self.categoryList.forEach(item => {
diff --git a/mobile/pages3/release/project/detail.vue b/mobile/pages3/release/project/detail.vue
index f30e0f3..07a4574 100644
--- a/mobile/pages3/release/project/detail.vue
+++ b/mobile/pages3/release/project/detail.vue
@@ -19,14 +19,14 @@
 			<!--基本信息-->
 			<view class="bg-white p30 mb22">
 				<view class="product-name text-ellipsis-2">
-					标题:{{ detail.name }}
+					<span class="category">{{  detail.category.name }}</span>{{ detail.name }}
 				</view>
-				<view class="product-describe"><text v-if="detail.product_type == 0">预算</text><text v-else>价格</text>:¥{{ detail.price }}</view>
-				<view class="product-describe"><text v-if="detail.product_type == 0">期望完成时间</text><text v-else>交付时间</text>:{{ detail.finish_time }}</view>
-				<view class="product-describe"><text v-if="detail.product_type == 0">期望地点</text><text v-else>服务地区</text>:{{ detail.detail }}</view>
-				<view class="product-describe" v-if="detail.product_type == 0 && detail.show_phone == 1">电话:{{ user.mobile }}</view>
+				<view class="product-describe"><text v-if="detail.product_type == 0">预算</text><text v-else>价格</text>一 ¥{{ detail.price }}</view>
+				<view class="product-describe"><text v-if="detail.product_type == 0">期望完成时间</text><text v-else>交付时间</text>一 {{ detail.finish_time }}</view>
+				<view class="product-describe"><text v-if="detail.product_type == 0">期望地点</text><text v-else>服务地区</text>一 {{ detail.detail }}</view>
+				<view class="product-describe" v-if="detail.product_type == 0 && detail.show_phone == 1"><text>电话</text>一 {{ user.mobile }}</view>
 				<view class="product-describe" v-if="detail.tag_list.length > 0">
-				       标签:<text v-for="(item, index) in detail.tag_list" :key="index">{{ item.name}};</text>
+				       <text>标签</text>一 <span class="tag" v-for="(item, index) in detail.tag_list" :key="index">{{ item.name}}</span>
 				</view>
 			</view>
 
@@ -38,7 +38,52 @@
 				</view>
 				<view class="content-box" v-html="detail.content"></view>
 			</view>
+			
+			<!--产品介绍-->
+			<view class="product-content">
+				<view class="p-0-30  border-b-e">
+					<view class="group-hd d-s-c"><text class="min-name f28">产品介绍</text></view>
+				</view>
+				<view class="content-box" v-html="detail.product_content"></view>
+			</view>
+			
+			<!--产品案例-->
+			<view class="product-content">
+				<view class="p-0-30  border-b-e">
+					<view class="group-hd d-s-c"><text class="min-name f28">产品应用案例</text></view>
+				</view>
+				<view class="content-box" v-html="detail.product_case"></view>
+			</view>
+			
+			
+			<!--评论-->
+			<view class="product-comment">
+				<view class="p-0-30 d-b-c">
+					<view class="group-hd left">
+						<text class="min-name f28">评论</text>
+					</view>
+					<view class="right" @click="lookEvaluate(detail.project_id)">
+						<text class="more">查看全部</text>
+						<text class="icon iconfont icon-jiantou" style="font-size: 22rpx;color: #9A9A9A;"></text>
+					</view>
+				</view>
+				<view class="comment-list" v-if="detail.evaluate.length > 0">
+					<view class="item" v-if="index<=2" v-for="(item, index) in detail.evaluate" :key="index">
+						<view class="cmt-user">
+							<view class="left">
+								<image class="photo" :src="item.user.avatarUrl" mode="aspectFill"></image>
+								<text class="name">{{ item.user.nickName }}</text>
+							</view>
+							<text class="datetime">{{ item.create_time }}</text>
+						</view>
+						<view class="mt20 lh150 f24">{{ item.evaluate_content }}</view>
+					</view>
+				</view>
+			</view>
+			
 			<view class="sage-bottom"></view>
+			
+			
 		</scroll-view>
 
 		<!--底部按钮-->
@@ -49,18 +94,22 @@
 					<text class="f22 gray3" style="height: 50rpx;line-height: 40rpx;">首页</text>
 				</button>
 			</view>
-			<!-- <view class="icon-box d-c-c">
-				<button class="d-c-c d-c bg-white">
+			 <view class="icon-box d-c-c">
+				<button class="d-c-c d-c bg-white" @click="jump()">
 					<text class="icon iconfont icon-kefu2 gray3" style="height: 50rpx;line-height: 60rpx;"></text>
-					<text class="f22 gray3" style="height: 50rpx;line-height: 40rpx;">联系他</text>
+					<text class="f22 gray3" style="height: 50rpx;line-height: 40rpx;">咨询</text>
 				</button>
-			</view> -->
+			</view> 
 			<template>
 				<template>
-					<button class="buy" @click="onPayOrder()">创建订单</button>
+					<button class="buy" @click="onEva()">我要评论</button>
 				</template>
 			</template>
 		</view>
+		
+		
+		<!-- 评论 -->
+		<Evaluate :isEva="isEva" :project_id="detail.project_id" @close="closeEva"></Evaluate>
 		
 		<!--支付选择-->
 		<Popup :show="isPayPopup" msg="支付方式" @hidePopup="hidePopupFunc">
@@ -97,12 +146,14 @@
 <script>
 	import utils from '@/common/utils.js';
 	import Popup from '@/components/uni-popup.vue';
+	import Evaluate from './popup/evaluate';
 	import {
 			pay
 		} from '@/common/pay.js';
 	export default {
 		components: {
 			Popup,
+			Evaluate,
 		},
 		data() {
 			return {
@@ -135,6 +186,7 @@
 				pay_type: 20,
 				payData:[],
 				topay:false,
+				isEva:false,
 		};
 	},
 	onLoad(e) {
@@ -227,6 +279,24 @@
 					uni.hideLoading();
 				});
 			},
+			
+			/*评论*/
+			onEva: function(e) {
+				let self = this;
+				self.isEva = true;
+			},
+			
+			/*关闭评论*/
+			closeEva: function(e) {
+				let self = this;
+				self.getData();
+				self.isEva = false;
+			},
+			
+			/*查看更多评论*/
+			lookEvaluate(project_id) {
+				this.gotoPage('/pages3/release/project/look-evaluate/look-evaluate?project_id=' + project_id);
+			},
 
 	
 		/*隐藏支付方式*/
@@ -304,6 +374,14 @@
 				
 			}
 			
+		},
+		
+		jump() {
+			let self = this;
+			let you_user_id = self.user.user_id;
+			let nickname = self.user.user.nickName;
+			let avatarurl = self.user.user.avatarUrl;
+			this.gotoPage('/pages3/release/chat/chat?you_user_id='+you_user_id+'&nickname='+nickname+'&avatarurl='+avatarurl);	
 		},
 			
 
@@ -417,8 +495,8 @@
 	}
 
 	.product-content .content-box {
-		padding:5rpx 10rpx;
-		font-size: 36rpx;
+		padding:5rpx 40rpx;
+		font-size: 30rpx;
 	}
 
 	.sage-bottom {
@@ -1020,4 +1098,17 @@
 		width: 108rpx;
 		height: 108rpx;
 	}
+	.tag{
+		padding:2rpx 5rpx;
+		margin-right: 5rpx;
+		border:1px solid red;
+		color:red;
+	}
+	.category{ padding:4rpx 5rpx; margin-right: 5rpx; background: red; color: #fff;}
+	.product-describe text{ 
+		font-size: 25rpx;
+		display: block;
+		font-weight: bold;
+		margin-bottom: 5rpx;
+	}
 </style>
diff --git a/mobile/pages3/release/project/list.vue b/mobile/pages3/release/project/list.vue
index ec8cf3a..17ae22b 100644
--- a/mobile/pages3/release/project/list.vue
+++ b/mobile/pages3/release/project/list.vue
@@ -19,18 +19,23 @@
 					<view class="scroll_box">
 						<scroll-view class="scroll" scroll-x="true" upper-threshode="50">
 								<view :class="category_id == 0?'scroll-view-item_H active':'scroll-view-item_H'"  @click="changeCategory(0)">全部</view>
+								<view :class="category_id == '-1'?'scroll-view-item_H active':'scroll-view-item_H'"  @click="changeCategory('-1')">推荐</view>
 								<view v-for="(item,index) in category_list" :key="index" :class="category_id==item.category_id?'scroll-view-item_H active':'scroll-view-item_H'"  @click="changeCategory(item.category_id)">{{item.name}}</view>
 						 </scroll-view>
 					</view>
 				</view>
 				
 				<!--列表-->
-				<view class="list d-s-c f-w">
+				<!-- <view class="list d-s-c f-w">
 					<view class="item d-stretch" v-for="(item, index) in listData" :key="index" >
 						<view class="product-info d-b-c d-c" @click="gotoDetail(item)">
 							<view style="border-bottom: 1px solid #ccc; width: 100%; display: flex; justify-content: flex-start; align-items: center; padding-bottom: 5rpx;">
 								<image style="width:100rpx;height: 100rpx; border-radius: 50%; margin-right: 10rpx;" :src="item.user.avatarUrl" mode="widthFix"></image>
-								{{ item.user.nickName }}
+								<view>
+									{{ item.user.nickName }}
+									<view v-if="item.grade" style="width:50rpx;height: 50rpx;"><image style="width:50rpx;height: 50rpx;" :src="item.grade.img"></image></view>
+								</view>
+								
 							</view>
 							<view class="product-title f26 gray3">
 							   {{ item.name }}
@@ -42,6 +47,24 @@
 							<view class="people-num price d-b-c">
 								<text class="gray9 f26">{{ item.create_time }}</text>	
 							</view>	
+						</view>
+					</view>
+				</view> -->
+				
+				<view class="list d-s-c f-w">
+					<view class="item d-stretch" v-for="(item, index) in listData" :key="index" >
+						<view class="product-info d-s-c">
+							<view class="img" @click="gotoDetail(item)"><image :src="item.image" mode="widthFix"></image></view>
+							
+							<view class="content">
+								<view class="product-title f26 gray3">
+							        <view @click="gotoDetail(item)"><text class="category">{{ item.category.name }}</text>{{ item.name }}</view>
+									<view class="chat"  @click="jump(item)">咨询</view>
+							     </view>
+								 <view class="product_content" @click="gotoDetail(item)">
+									 {{ item.product_content }}
+								 </view>
+							</view>
 						</view>
 					</view>
 				</view>
@@ -86,6 +109,7 @@
 				category_id:'',
 				product_type:0,
 				category_list:[],
+				is_check:0,
 			};
 		},
 		computed: {
@@ -156,6 +180,14 @@
 				self.getlist();
 			},	
 			
+			jump(item) {
+				let self = this;
+				let you_user_id = item.user_id;
+				let nickname = item.user.nickName;
+				let avatarurl =item.user.avatarUrl;
+				this.gotoPage('/pages3/release/chat/chat?you_user_id='+you_user_id+'&nickname='+nickname+'&avatarurl='+avatarurl);	
+			},
+			
 			
 			/*搜索*/
 			gotoSearch() {
@@ -183,6 +215,7 @@
 					function(res) {
 						self.loading = false;
 						self.category_list = res.data.category_list;
+						self.is_check = res.data.is_check;
 						self.listData = res.data.list.data;
 						self.last_page = res.data.list.last_page;
 						if (res.data.list.last_page <= 1) {
@@ -198,8 +231,15 @@
 			
 			/*跳转详情*/
 			gotoDetail(e) {
-				let url = 'pages3/release/project/detail?project_id=' + e.project_id
-				this.gotoPage(url);
+				if(this.is_check == 1){
+					let url = 'pages3/release/project/detail?project_id=' + e.project_id
+				    this.gotoPage(url);
+				}else{
+					uni.showToast({
+						title: '请开通查看权限'
+					});
+				}
+				
 			},
 		}
 	};
@@ -303,7 +343,7 @@
 
 	.bargain-list .list .item {
 		width: 100%;
-		padding: 30rpx;
+		padding: 20rpx;
 		margin-bottom: 20rpx;
 		box-sizing: border-box;
 		border-radius: 16rpx;
@@ -324,6 +364,7 @@
 		flex: 1;
 		//padding-left: 20rpx;
 		overflow: hidden;
+		align-items: normal;
 	}
 
 	.bargain-list .product-cover .people-num {
@@ -348,7 +389,7 @@
 
 	.bargain-list .product-title {
 		width: 100%;
-		min-height: 40rpx;
+		height: 40rpx;
 		line-height: 40rpx;
 		font-size: 32rpx;
 		color: #333333;
@@ -436,4 +477,46 @@
 	.scroll-view-item_H.active{
 		color: red;
 	}
+	.img{
+		width:160rpx;
+		height:160rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+	.img img{ max-width: 100%;}
+	.product-title{
+		width: 100%;
+		display: flex;
+		justify-content: space-between;
+		overflow: hidden;
+	}
+	.content{
+		width:100%;
+		padding:5px;
+	}
+	.product-title .category{
+		margin-right: 10rpx;
+		padding: 2rpx 18rpx;
+		background: red;
+		color: #fff;
+		font-size: 24rpx;
+	}
+	
+	.product-title .chat{
+		width:70rpx;
+		border: 1rpx solid red;
+		color: red;
+		font-size: 24rpx;
+		margin-left: 10rpx;
+		text-align: center;
+	}
+	.product_content{
+		margin-top:10px;
+		height:80rpx;
+		line-height: 40rpx;
+		font-size: 26rpx;
+		color:#ccc;
+		overflow: hidden;
+	}
 </style>
diff --git a/mobile/pages3/release/project/look-evaluate/look-evaluate.vue b/mobile/pages3/release/project/look-evaluate/look-evaluate.vue
new file mode 100644
index 0000000..7c7fa03
--- /dev/null
+++ b/mobile/pages3/release/project/look-evaluate/look-evaluate.vue
@@ -0,0 +1,295 @@
+<template>
+	<view class="look-evaluate">
+		<view class="top-tabbar">
+			<view :class="state_active == -1 ? 'tab-item active' : 'tab-item'" @click="stateFunc(0)">全部({{ Total.all }})
+			</view>
+			<view :class="state_active == 10 ? 'tab-item active' : 'tab-item'" @click="stateFunc(10)">
+				<view class="d-c-c">
+					<text class="icon iconfont icon-pingjiahaoping"></text>
+					<text class="ml10 gray9">好评({{ Total.praise }})</text>
+				</view>
+			</view>
+			<view :class="state_active == 20 ? 'tab-item active' : 'tab-item'" @click="stateFunc(20)">
+				<view class="d-c-c">
+					<text class="icon iconfont icon-pingjiazhongping"></text>
+					<text class="ml10 gray9">中评({{ Total.review }})</text>
+				</view>
+			</view>
+			<view :class="state_active == 30 ? 'tab-item active' : 'tab-item'" @click="stateFunc(30)">
+				<view class="d-c-c">
+					<text class="icon iconfont icon-pingjiachaping"></text>
+					<text class="ml10 gray9">差评({{ Total.negative }})</text>
+				</view>
+			</view>
+		</view>
+
+		<!--评论列表-->
+		<scroll-view scroll-y="true" class="scroll-Y" :style="'height:' + scrollviewHigh + 'px;'" lower-threshold="50"
+			@scrolltolower="scrolltolowerFunc">
+			<view class="comment-list">
+				<view class="item" v-for="(item, index) in tableData" :key="index">
+					<view class="cmt-user">
+						<view class="left">
+							<image class="photo" :src="item.user.avatarUrl" mode="aspectFill"></image>
+							<text class="name">{{ item.user.nickName }}</text>
+						</view>
+					</view>
+					<view class="d-b-c p20">
+						<view class="d-s-c">
+							<view v-if="item.score == 10" class="d-c-c mr20">
+								<text class="icon iconfont icon-pingjiahaoping"></text>
+								<text class="ml10 gray9">好评</text>
+							</view>
+							<view v-if="item.score == 20" class="d-c-c mr20">
+								<text class="icon iconfont icon-pingjiazhongping"></text>
+								<text class="ml10 gray9">中评</text>
+							</view>
+							<view v-if="item.score == 30" class="d-c-c mr20">
+								<text class="icon iconfont icon-pingjiachaping"></text>
+								<text class="ml10 gray9">差评</text>
+							</view>
+						</view>
+						<text class="datetime gray9">{{ item.create_time }}</text>
+					</view>
+					<view class="p-0-20 f24 gray3">{{ item.evaluate_content }}</view>
+					<view class="imgs d-s-c p-0-20">
+						<view class="box" v-for="(imgs, img_num) in item.image_list" :key="img_num">
+							<image @click="preview(item.image_list,imgs.file_path)" :src="imgs.file_path" mode="aspectFill"
+								width=""></image>
+						</view>
+					</view>
+				</view>
+				<!-- 没有记录 -->
+				<view class="d-c-c p30" v-if="tableData.length==0 && !loading">
+					<view class="none-data-box">
+						<image src="/static/none.png" mode="widthFix"></image>
+						<text>亲,暂无相关记录哦</text>
+					</view>
+				</view>
+				<uni-load-more v-else :loadingType="loadingType"></uni-load-more>
+			</view>
+		</scroll-view>
+		<view v-if="isopenimg" class="popimg" @click="isopenimg=false">
+			<image :src="popImg" mode="aspectFit"></image>
+		</view>
+	</view>
+</template>
+
+<script>
+	import uniLoadMore from "@/components/uni-load-more.vue";
+	export default {
+		components: {
+			uniLoadMore
+		},
+		data() {
+			return {
+				/*手机高度*/
+				phoneHeight: 0,
+				/*可滚动视图区域高度*/
+				scrollviewHigh: 0,
+				/*选中状态*/
+				state_active: -1,
+				/*id*/
+				project_id: 0,
+				/*列表*/
+				tableData: [],
+				/*统计*/
+				Total: {
+					/*总数*/
+					all: 0,
+					/*score = 30*/
+					negative: 0,
+					/*score = 10*/
+					praise: 0,
+					/*score = 20*/
+					negative: 0,
+					review: 0
+				},
+				/*页码*/
+				page: 1,
+				list_rows: 15,
+				no_more: false,
+				loading: true,
+				/*最后一页码数*/
+				last_page: 0,
+				popImg: '',
+				isopenimg: false
+			};
+		},
+		computed: {
+			/*加载中状态*/
+			loadingType() {
+				if (this.loading) {
+					return 1;
+				} else {
+					if (this.tableData.length != 0 && this.no_more) {
+						return 2;
+					} else {
+						return 0;
+					}
+				}
+			}
+		},
+		onLoad(e) {
+			this.project_id = e.project_id;
+		},
+		mounted() {
+			this.init();
+			/*获取数据*/
+			this.getData();
+		},
+		methods: {
+			preview(list, img) {
+				// #ifdef H5
+				if (!this.isWeixin()) {
+					this.isopenimg = true;
+					this.popImg = img;
+				}else{
+					this.openImg(list, img);
+				}
+				return
+				// #endif
+				this.openImg(list, img);
+			},
+			openImg(list, img) {
+				let arr = [];
+				list.forEach((item, index) => {
+					arr.push(item.file_path)
+				})
+				uni.previewImage({
+					urls: arr,
+					current: img,
+					fail(err) {
+						this.showError(err)
+						console.log(err)
+					}
+				});
+			},
+			/*初始化*/
+			init() {
+				let self = this;
+				uni.getSystemInfo({
+					success(res) {
+						self.phoneHeight = res.windowHeight;
+						// 计算组件的高度
+						let view = uni.createSelectorQuery().select('.top-tabbar');
+						view.boundingClientRect(data => {
+							let h = self.phoneHeight - data.height;
+							self.scrollviewHigh = h;
+						}).exec();
+					}
+				});
+			},
+
+			/*获取数据*/
+			getData() {
+				let _this = this;
+				let project_id = _this.project_id;
+				_this._get(
+					'plus.release.evaluate/lists', {
+						project_id: project_id,
+						scoreType: _this.state_active,
+						page: _this.page,
+						list_rows: _this.list_rows
+					},
+					function(res) {
+						_this.loading = false;
+						_this.Total = res.data.total;
+						_this.tableData = _this.tableData.concat(res.data.list.data);
+						_this.last_page = res.data.list.last_page;
+						if (res.data.list.last_page <= 1) {
+							_this.no_more = true;
+						}
+					}
+				);
+			},
+
+			/*可滚动视图区域到底触发*/
+			scrolltolowerFunc() {
+				let self = this;
+				self.bottomRefresh = true;
+				self.page++;
+				self.loading = true;
+				if (self.page > self.last_page) {
+					self.loading = false;
+					self.no_more = true;
+					return;
+				}
+				self.getData();
+			},
+
+			/*类别切换*/
+			stateFunc(e) {
+				let self = this;
+				if (self.state_active != e) {
+					self.tableData = [];
+					self.no_more = false;
+					self.loading = true;
+					self.state_active = e;
+					self.page = 1;
+					self.getData();
+				}
+			}
+		}
+	};
+</script>
+
+<style>
+	.look-evaluate .comment-list {
+		background: #ffffff;
+	}
+
+	.look-evaluate .comment-list .item {
+		padding-top: 30rpx;
+		padding-bottom: 30rpx;
+		border-top: none;
+		border-bottom: 1px solid #dddddd;
+	}
+
+	.look-evaluate .iconfont {
+		border-radius: 50%;
+		font-size: 40rpx;
+		text-align: center;
+	}
+
+	.look-evaluate .icon-pingjiahaoping {
+		color: #f42222;
+	}
+
+	.look-evaluate .icon-pingjiazhongping {
+		color: #f2b509;
+	}
+
+	.look-evaluate .icon-pingjiachaping {
+		color: #999999;
+	}
+
+	.look-evaluate .imgs {
+		flex-wrap: wrap;
+	}
+
+	.look-evaluate .imgs .box {
+		margin-top: 10rpx;
+		margin-right: 10rpx;
+	}
+
+	.look-evaluate .imgs .box:nth-child(3n) {
+		margin-right: 0;
+	}
+
+	.look-evaluate .imgs .box,
+	.look-evaluate .imgs .box image {
+		width: 210rpx;
+		height: 210rpx;
+	}
+
+	.popimg {
+		position: fixed;
+		width: 750rpx;
+		height: 100vh;
+		background-color: #000000;
+		top: 0;
+		left: 0;
+		z-index: 2000;
+	}
+</style>
diff --git a/mobile/pages3/release/project/popup/evaluate.vue b/mobile/pages3/release/project/popup/evaluate.vue
new file mode 100644
index 0000000..b97378b
--- /dev/null
+++ b/mobile/pages3/release/project/popup/evaluate.vue
@@ -0,0 +1,232 @@
+<template>
+	<view style="flex: 1;">
+		<uniPopup :show="isEva" type="middle" @hidePopup="hidePopupFunc">
+			<view class="ww100">
+				<view class="t-c f36 pb20">评论</view>
+				<!-- <view class="p-30-0 border-b-d9 border-t-d9 f32">
+					<view>111</view>
+				</view> -->
+				
+				<!-- <view class="d-s-c p-30-0 border-b-d9 border-t-d9 f32">
+					<view class="eval">
+						服务星级:
+						<i v-for="(itemEv,indexEv) in service" :key="indexEv" :class="itemEv?'icon iconfont icon-start':'icon iconfont icon-start1'"
+						 @click="chooseServ(indexEv,index)"></i>
+					</view>
+				</view> -->
+				<view class="d-s-c p-30-0 border-b-d9 border-t-d9 f32">
+					<view class="upload-list d-s-c">
+						<view class="item" v-for="(imgs, img_num) in image_list" :key="img_num"  @click="deleteImg(img_num)">
+							<image :src="imgs.file_path" mode="aspectFit"></image>
+						</view>
+						<view class="item upload-btn d-c-c d-c" @click="openUpload()" v-if="image_list.length < 9" >
+							<text class="icon iconfont icon-xiangji"></text>
+							<text class="gray9">上传图片</text>
+						</view>
+					</view>
+				</view>
+				<view class="d-s-c p-30-0 border-b-d9 border-t-d9 f32">
+					<radio-group class="d-s-c" @change="changeRadio($event,index)">
+						<label class="d-s-c make-item mr10">
+							<view><radio style="transform:scale(0.7)" color="#EE1413" :checked="score == 10" value="10" /></view>
+							<view class="f26 color-57">好评</view>
+						</label>
+						<label class="d-s-c make-item mr10">
+							<view><radio style="transform:scale(0.7)" color="#EE1413" :checked="score == 20" value="20" /></view>
+							<view class="f26 color-57">中评</view>
+						</label>
+						<label class="d-s-c make-item mr10">
+							<view><radio style="transform:scale(0.7)" color="#EE1413" :checked="score == 30" value="30" /></view>
+							<view class="f26 color-57">差评</view>
+						</label>
+					</radio-group>
+				</view>
+				<view class="d-s-c p-30-0 border-b-d9 border-t-d9 f32">
+					<textarea class="border-box" placeholder="请输入你的评语" v-model="evaluate_content"></textarea>
+				</view>
+				<button class="revise_btn" @click="revise">确定提交</button>
+			</view>
+		</uniPopup>
+		
+		<!--上传图片-->
+		<Upload v-if="isUpload" @getImgs="getImgsFunc"></Upload>
+	</view>
+</template>
+
+<script>
+	import uniPopup from '@/components/uni-popup.vue';
+	import Upload from '@/components/upload/upload.vue';
+	
+	export default {
+		data() {
+			return {
+				score:10,
+				server_score:0,
+				service:[false,false,false,false,false],
+				evaluate_content:'',
+				/*是否打开上传图片*/
+				isUpload: false,
+				image_list:[],
+			};
+		},
+		components: {
+			uniPopup,
+			Upload,
+		},
+		props: ['isEva', 'project_id'],
+		watch:{
+			isEva(val){
+			}   
+		},
+		methods: {
+			/* 服务评分 */
+			chooseServ(n,m){
+				let self=this;
+				self.server_score =0;
+				this.service.forEach((item,index)=>{
+					if(index<=n){
+						this.service.splice(index,1,true);
+						self.server_score++;
+					}else{
+						this.service.splice(index,1,false);
+					}
+				})
+			},
+			/* 单选框 */
+			changeRadio(e, index) {
+				this.score = e.detail.value;
+			},
+			revise(){
+				let self = this;
+				if(self.evaluate_content == ''){
+					uni.showToast({
+						title: '请输入评语',
+					});
+					return false;
+				}
+				if(self.image_list.length == 0){
+					uni.showToast({
+						title: '请上传图片',
+					});
+					return false;
+				}
+				uni.showModal({
+					title: '提示',
+					content: '您确定提交吗?',
+					success: function(o) {
+						if (o.confirm) {
+							uni.showLoading({
+								title: '加载中',
+								mask: true
+							});
+							uni.showLoading({
+									title: '正在提交',
+									mask: true
+								})
+								self._post('plus.release.Evaluate/evaluate', {
+									project_id: self.project_id,
+									server_score:self.server_score,
+									score:self.score,
+									evaluate_content:self.evaluate_content,
+									image_list:JSON.stringify(self.image_list),
+								}, function(data) {
+									uni.hideLoading();
+									uni.showToast({
+										title: '操作成功',
+										duration: 2000,
+										icon: 'success'
+									});
+									setTimeout(function(){
+										self.hidePopupFunc();
+									},2000);
+								});
+						}
+					},
+				});
+			},
+			hidePopupFunc(){
+				this.$emit('close', {
+				  type: 'success',
+				})
+			},
+			
+			/*打开上传图片*/
+			openUpload() {
+				this.isUpload = true;
+			},
+			
+			/*获取上传的图片*/
+			getImgsFunc(e) {
+				let self = this;
+				if(e&&typeof(e)!='undefined'){
+					self.image_list = self.image_list.concat(e);
+				}
+				self.isUpload = false;
+			},
+			
+			/*点击图片删除*/
+			deleteImg(i,n){
+				this.loadding=true;
+				this.image_list.splice(n,1);
+				this.loadding=false;
+			},
+		}
+	};
+</script>
+
+<style scoped lang="scss">
+	.buy-checkout.vender .item .key {
+		width: 200rpx;
+	}
+
+	.pr20 {
+		padding-right: 20rpx;
+		/* padding-bottom: 40rpx; */
+	}
+	.icon-box.linkmen_add{
+		background-color: $dominant-color;
+		width: 38rpx;
+		height: 38rpx;
+		border-radius: 8rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+	.icon-box.linkmen_add .icon-jia{
+		color: #FFFFFF;
+		font-size: 22rpx;
+	}
+	.revise_btn{
+		background-color: #E2231A;
+		border: none;
+		margin-top: 30rpx;
+		color: #FFFFFF;
+	}
+	.t-c{
+		text-align: center;
+	}
+	.m-30-0{
+		margin: 30rpx 0;
+	}
+	.icon.icon-jiantou{
+		color: #999999;
+		font-size: 26rpx;
+	}
+	.icon.icon-zhanghumingcheng, .icon.icon-dizhi, .icon.icon-icon_xianshi-xian, .icon.icon-bangzhu {
+		color: #333;
+		font-size: 28rpx;
+	}
+	.address-defalut-wrap {
+		padding: 0;
+	}
+	
+	.icon-start{
+		color: #f5a623;
+	}
+	
+	.eval{
+		display: flex;
+		justify-content: space-around;
+		align-items: center;
+	}
+</style>
diff --git a/mobile/pages3/release/supplyindex/index.vue b/mobile/pages3/release/supplyindex/index.vue
index 17d43d8..cd6565b 100644
--- a/mobile/pages3/release/supplyindex/index.vue
+++ b/mobile/pages3/release/supplyindex/index.vue
@@ -20,13 +20,22 @@
 						<view class="photo">
 							<image :src="user.avatarUrl" mode="aspectFill"></image>
 						</view>
+						<view>
 						<view class="user-name">
 							<view class="gray3 f32">{{ user.nickName }}</view>
 						</view>
 						
+						<view class="gray3 d-s-c mt10">
+							<text class="f28 flex-1 mr20">连盟币:{{user.points}}</text>
+							<view @click="jump">
+								<text>[切换到需求方]</text>
+								<text class="iconfont icon-jiantou"></text>
+							</view>
+						</view> 
+						</view>
 					</view>
 				</view>
-				<view class="d-s-c p-30-0 top_dash">
+				<!-- <view class="d-s-c p-30-0 top_dash">
 					<view class="flex-1 d-c-c d-c">
 						<view class="redF6">
 							<text class="f24">¥</text>
@@ -51,8 +60,16 @@
 				</view>
 				<view class="d-c-c pt30">
 					<button type="primary" class="btn-gcred theme-btn flex-1" @click="gotoCash">我要提现</button>
+				</view> -->
+			</view>
+			
+			<view class="bind_phone" v-if="release.is_check == 0">
+				<view class="bind_content">
+					<view class="bind_txt">您还没有查看信息权限,需{{pay_price}}连盟币开通</view>
+					<button class="bind_btn" @click="topay">去开通</button>
 				</view>
 			</view>
+			
 			<!--图标入口-->
 			<view class="agent-wrap m-0-20 p30 d-s-c f-w mt20 bg-white">
 				<view class="d-c-c d-c flex-1" @click="gotoPage('/pages3/release/project/list?product_type=0')">
@@ -67,7 +84,13 @@
 					</view>
 					<text class="pt10 f26 mt20">发布服务</text>
 				</view>
-				<view class="d-c-c d-c flex-1" @click="gotoPage('/pages3/release/supplyorder/index')">
+				<view class="d-c-c d-c flex-1" @click="gotoPage('/pages3/release/chat/chat_list')">
+					<view>
+						<image class="agent_index_img" src="../../../static/icon/icon-zijinmingxi.png" mode=""></image>
+					</view>
+					<text class="pt10 f26 mt20">私信列表</text>
+				</view> 
+				<!-- <view class="d-c-c d-c flex-1" @click="gotoPage('/pages3/release/supplyorder/index')">
 					<view>
 						<image class="agent_index_img" src="../../../static/icon/icon-zijinmingxi.png" mode=""></image>
 					</view>
@@ -78,7 +101,7 @@
 						<image class="agent_index_img" src="../../../static/icon/icon-zijinmingxi.png" mode=""></image>
 					</view>
 					<text class="pt10 f26 mt20">提现明细</text>
-				</view>
+				</view> -->
 				
 	
 				<!-- <view class="d-c-c d-c flex-1" @click="gotoPage('/pages2/salesman/qrcode/qrcode')">
@@ -123,6 +146,8 @@
 				/*顶部背景*/
 				top_background: '',
 				user:[],
+				setting:[],
+				pay_price:0,
 			};
 		},
 		onLoad(e) {
@@ -143,10 +168,39 @@
 					self.top_background = data.data.background;
 					self.release = data.data.release;
 					self.user = data.data.user;
+					self.setting = data.data.setting;
+					if(self.setting.check_price && self.setting.check_price!= null){
+						self.pay_price = self.setting.check_price;
+					}
 					self.isData = true;
 					self.loadding = false;
 					uni.hideLoading();
 				});
+			},
+			
+			topay() {
+				let self = this;
+				let formData=self.form;
+				uni.showLoading({
+					title: '加载中'
+				});
+				self._post(
+					'plus.release.demandIndex/topay', {
+						pay_source: self.getPlatform(),
+						formData: JSON.stringify(formData),
+					},
+					 function(res) {
+						uni.hideLoading();
+						self.showSuccess(res.msg,function(){
+							self.getData();
+						});
+					}
+				);
+			},
+			
+			/*切换身份*/
+			jump() {
+				this.gotoPage('/pages3/release/demandindex/index');
 			},
 
 			/*申请入驻*/
@@ -370,4 +424,35 @@
 	.user-info .photo {
 		padding-right: 20rpx;
 	}
+	.bind_phone {
+		width: 100%;
+		height: 80rpx;
+		padding: 0 30rpx;
+		box-sizing: border-box;
+		margin-bottom: 30rpx;
+	}
+	
+	.bind_content {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		background: #ffffff;
+		/* box-shadow: 0 0 6rpx 0 rgba(0, 0, 0, 0.1); */
+		border-radius: 16rpx;
+		height: 100%;
+		padding: 0 20rpx;
+	}
+	
+	.bind_txt {}
+	
+	.bind_btn {
+		width: 134rpx;
+		height: 50rpx;
+		line-height: 50rpx;
+		font-size: 22rpx;
+		border-radius: 25rpx;
+		text-align: center;
+		color: #FFFFFF;
+		background-color: #e2231a;
+	}
 </style>
diff --git a/mobile/pages3/release/supplyproject/edit.vue b/mobile/pages3/release/supplyproject/edit.vue
index a5e3d4c..34c35ab 100644
--- a/mobile/pages3/release/supplyproject/edit.vue
+++ b/mobile/pages3/release/supplyproject/edit.vue
@@ -61,6 +61,14 @@
 					<input class="flex-1" v-model="form.detail" type="text" placeholder-class="grary" placeholder="请输入您的期望地点" />
 				</view>
 				
+				<view class="textarea-box d-s-c f28">
+					<textarea class="p10 box-s-b border flex-1" v-model="form.product_content" placeholder="请输入产品介绍" />
+				</view>
+				
+				<view class="textarea-box d-s-c f28 mt10">
+					<textarea class="p10 box-s-b border flex-1" v-model="form.product_case" placeholder="请输入产品应用案例" />
+				</view>
+				
 				<view class="form-item border-b">
 					<view class="field-name">是否展示:</view>
 					<radio-group class="d-s-c" @change="changeShow($event,index)">
@@ -74,6 +82,7 @@
 						</label>
 					</radio-group>
 				</view>
+				
 				
 				<!-- <view class="form-item border-b">
 					<text class="field-name">需求所在地:</text>
@@ -113,6 +122,8 @@
 				image_list:[],
 				tag_list:[],
 				content:'',
+				product_content:'',
+				product_case:'',
 				name:'',
 				category_id:'',
 				finish_time:'请选择日期',
diff --git a/mobile/pages3/release/supplyproject/release.vue b/mobile/pages3/release/supplyproject/release.vue
index b6de1d8..ac043dc 100644
--- a/mobile/pages3/release/supplyproject/release.vue
+++ b/mobile/pages3/release/supplyproject/release.vue
@@ -60,6 +60,14 @@
 					<view class="field-name">服务地区:</view>
 					<input class="flex-1" v-model="form.detail" type="text" placeholder-class="grary" placeholder="请输入您的服务地区" />
 				</view>
+				
+				<view class="textarea-box d-s-c f28">
+					<textarea class="p10 box-s-b border flex-1" v-model="form.product_content" placeholder="请输入产品介绍" />
+				</view>
+				
+				<view class="textarea-box d-s-c f28 mt10">
+					<textarea class="p10 box-s-b border flex-1" v-model="form.product_case" placeholder="请输入产品应用案例" />
+				</view>
 				<view class="form-item border-b">
 					<view class="field-name">是否展示:</view>
 					<radio-group class="d-s-c" @change="changeShow($event,index)">
@@ -72,6 +80,11 @@
 							<view class="f26 color-57">否</view>
 						</label>
 					</radio-group>
+				</view>
+				
+				<view class="form-item border-b">
+					<view class="field-name">支付金额:</view>
+					<view>{{pay_price}}连盟币</view>
 				</view>
 				
 				<!-- <view class="form-item border-b">
@@ -112,6 +125,8 @@
 				image_list:[],
 				tag_list:[],
 				content:'',
+				product_content:'',
+				product_case:'',
 				name:'',
 				category_id:'',
 				finish_time:'请选择日期',
@@ -136,6 +151,8 @@
 			location_address: '',
 			short_address:'',
 			Address:[],
+			setting:[],
+			pay_price:0,
 		};
 	},
 	onLoad(e){
@@ -190,6 +207,10 @@
 				self.loadding=false;
 				self.tagList = res.data.tag_list;
 				self.categoryList = res.data.category_list;
+				self.setting = res.data.setting;
+				if(self.setting.supply_price && self.setting.supply_price!= null){
+					self.pay_price = self.setting.supply_price;
+				}
 				var list = [];
 				list.push("请选择分类");
 				self.categoryList.forEach(item => {
diff --git a/shop_vue/src/api/plus/release.js b/shop_vue/src/api/plus/release.js
index 7d15131..7809d89 100644
--- a/shop_vue/src/api/plus/release.js
+++ b/shop_vue/src/api/plus/release.js
@@ -148,6 +148,30 @@
     settlement(data, errorback) {
         return request._post('/shop/plus.release.setting/settlement', data, errorback);
     },
+    /*等级列表*/
+    gradelist(data, errorback) {
+        return request._post('/shop/plus.release.grade/index', data, errorback);
+    },
+    /*添加等级*/
+    addgrade(data, errorback) {
+        return request._post('/shop/plus.release.grade/add', data, errorback);
+    },
+    /*修改等级*/
+    editGrade(data, errorback) {
+        return request._post('/shop/plus.release.grade/edit', data, errorback);
+    },
+    /*删除等级*/
+    deletegrade(data, errorback) {
+        return request._post('/shop/plus.release.grade/delete', data, errorback);
+    },
+    /*评论列表*/
+    evaluate(data, errorback) {
+        return request._post('/shop/plus.release.evaluate/list', data, errorback);
+    },
+    /*删除*/
+    evaluateDel(data, errorback) {
+        return request._post('/shop/plus.release.evaluate/delete', data, errorback);
+    },
 
 }
 
diff --git a/shop_vue/src/views/plus/bonus/setting/part/Basic.vue b/shop_vue/src/views/plus/bonus/setting/part/Basic.vue
index 8edf173..4e3af3d 100644
--- a/shop_vue/src/views/plus/bonus/setting/part/Basic.vue
+++ b/shop_vue/src/views/plus/bonus/setting/part/Basic.vue
@@ -74,6 +74,21 @@
           <div class="tips">如开启,用户成为分红用户后同时成为分销商,不受分销插件条件影响</div>
         </div>
       </el-form-item>
+      <el-form-item label="下级收益补贴条件" name="second">
+        <label>直推指定等级</label>
+        <el-select v-model="form.referee_grade_ids" multiple style="width: 160px; margin-left: 10px;">
+          <el-option
+            v-for="item in userGradeList"
+            :key="item.grade_id"
+            :label="item.name"
+            :value="item.grade_id">
+          </el-option>
+        </el-select>
+        <label>直推人数</label>
+        <el-input v-model="form.referee_grade_count" type="number"  style="width: 160px; margin-left: 10px;" ></el-input>
+        <span class="ml10">人</span>
+        <div class="tips">直推多少用户指定会员等级后,即可享受享受下级收益补贴</div>
+      </el-form-item>
       <!--提交-->
       <div class="common-button-wrapper">
         <el-button size="small" type="primary" @click="onSubmit" :loading="loading">提交</el-button>
@@ -87,6 +102,7 @@
 <script>
 import PlusApi from '@/api/plus/bonus.js';
 import Product from '@/components/product/Product';
+import UserApi from '@/api/user.js';
 
 export default {
   components: {
@@ -99,12 +115,15 @@
       form: {
         is_open: '',
         limit_buy: '',
-        become_agent: ''
+        become_agent: '',
+        referee_grade_ids: [],
+        referee_grade_count: ''
       },
       /*是否打开产品弹出层*/
       isproduct: false,
       /*是否正在加载*/
-      loading: false
+      loading: false,
+      userGradeList:[]
     };
   },
   props:{
@@ -116,8 +135,22 @@
     if (!this.form.product_image) {
       this.form.product_image = [];
     }
+    // 等级id转换成数组
+    for (let i = 0; i < this.form.referee_grade_ids.length; i++) {
+      this.form.referee_grade_ids[i] = parseInt(this.form.referee_grade_ids[i]);
+    }
+    this.getUserGradeList();
   },
   methods: {
+    /*获取用户管理模块的等级列表*/
+    getUserGradeList() {
+      let self = this;
+      UserApi.gradelist({}, true)
+        .then(res => {
+          self.userGradeList = res.data.list.data || res.data.list;
+        })
+        .catch(error => {});
+    },
 
     /*提交表单*/
     onSubmit() {
diff --git a/shop_vue/src/views/plus/release/demand/user/User.vue b/shop_vue/src/views/plus/release/demand/user/User.vue
index 94ca061..991bad3 100644
--- a/shop_vue/src/views/plus/release/demand/user/User.vue
+++ b/shop_vue/src/views/plus/release/demand/user/User.vue
@@ -25,11 +25,17 @@
           <el-table-column prop="real_name" label="姓名" width="100"></el-table-column>
           <el-table-column prop="mobile" label="手机号"></el-table-column>
          <!-- <el-table-column prop="detail" label="地址"></el-table-column> -->
+         <el-table-column prop="" label="会员等级">
+           <template slot-scope="scope">
+             <span v-if="scope.row.grade_id == 0">无等级</span>
+             <span v-else>{{ scope.row.grade.name }}</span>
+           </template>
+         </el-table-column>
           <el-table-column prop="create_time" label="成为时间" width="140"></el-table-column>
           <el-table-column fixed="right" label="操作" width="160">
             <template slot-scope="scope">
               <div>
-                <el-button @click="saleClick(scope.row)" type="text" size="small">需求订单</el-button>
+                <!-- <el-button @click="saleClick(scope.row)" type="text" size="small">需求订单</el-button> -->
                 <el-button @click="EditClick(scope.row)" type="text" size="small">修改</el-button>
                 <el-button @click="delClick(scope.row)" type="text" size="small">删除</el-button>
               </div>
@@ -53,7 +59,7 @@
     </div>
 
     <!--编辑-->
-    <Edit :open_edit="open_edit" :userModel="userModel" @close="closeEditFunc"></Edit>
+    <Edit :open_edit="open_edit" :userModel="userModel"  :gradeList="gradeList" @close="closeEditFunc"></Edit>
 
   </div>
 </template>
@@ -88,6 +94,8 @@
       userModel:{},
       /*是否打开修改*/
       open_edit:false,
+      /*等级*/
+      gradeList: [],
     };
   },
   created() {
@@ -117,6 +125,7 @@
           self.loading = false;
           self.tableData = data.data.list.data;
           self.totalDataNumber = data.data.list.total;
+          self.gradeList = data.data.grade;
         })
         .catch(error => {
           self.loading = false;
diff --git a/shop_vue/src/views/plus/release/demand/user/dialog/Edit.vue b/shop_vue/src/views/plus/release/demand/user/dialog/Edit.vue
index 70a35ca..7ec11cd 100644
--- a/shop_vue/src/views/plus/release/demand/user/dialog/Edit.vue
+++ b/shop_vue/src/views/plus/release/demand/user/dialog/Edit.vue
@@ -1,7 +1,6 @@
 <template>
   <!--
       	作者:yj
-      	时间:2025-11-9
       -->
   <el-dialog title="编辑" :visible.sync="dialogVisible" @close="cancelFunc" :close-on-click-modal="false" :close-on-press-escape="false" width="60%">
     <el-form :model="formData">
@@ -16,6 +15,11 @@
       </el-form-item>
       <el-form-item label="手机号" :label-width="formLabelWidth">
         <el-input type="text" v-model="formData.mobile" autocomplete="off"></el-input>
+      </el-form-item>
+      <el-form-item label="等级" :label-width="formLabelWidth">
+        <el-select v-model="formData.grade_id" placeholder="-请选择等级-">
+          <el-option v-for="(item,index) in gradeList" :key="index" :label="item.name" :value="item.grade_id"></el-option>
+        </el-select>
       </el-form-item>
     </el-form>
     <div slot="footer" class="dialog-footer">
@@ -39,10 +43,7 @@
       formData: {},
     };
   },
-  props: {
-    open_edit: Boolean,
-    userModel: Object
-  },
+  props: ['open_edit','userModel','gradeList'],
   watch: {
     open_edit: function(n, o) {
       if (n != o) {
@@ -64,6 +65,7 @@
       params.user_id= this.formData.user_id;
       params.real_name=this.formData.real_name;
       params.mobile=this.formData.mobile;
+      params.grade_id=this.formData.grade_id;
       PlusApi.demandUserEdit(params, true)
         .then(data => {
           self.$message({
diff --git a/shop_vue/src/views/plus/release/demandproject/index.vue b/shop_vue/src/views/plus/release/demandproject/index.vue
index bc802d1..e2b6559 100644
--- a/shop_vue/src/views/plus/release/demandproject/index.vue
+++ b/shop_vue/src/views/plus/release/demandproject/index.vue
@@ -26,6 +26,12 @@
       <div class="table-wrap">
         <el-table size="small" :data="tableData" border style="width: 100%" v-loading="loading">
           <el-table-column prop="project_id" label="ID" width="100"></el-table-column>
+          <el-table-column prop="nickName" label="发布用户"></el-table-column>
+          <el-table-column prop="nickName" label="微信头像">
+            <template slot-scope="scope">
+              <img :src="scope.row.user.avatarUrl" width="30px" height="30px" />
+            </template>
+          </el-table-column>
           <el-table-column prop="name" label="标题"></el-table-column>
           <el-table-column prop="category.name" label="分类" width="200"></el-table-column>
           <el-table-column prop="price" label="预算" width="200"></el-table-column>
@@ -36,10 +42,11 @@
               <span v-if="scope.row.status == 2" class="green">已驳回</span>
             </template>
           </el-table-column>
-          <el-table-column fixed="right" label="操作" width="150">
+          <el-table-column fixed="right" label="操作" width="200">
             <template slot-scope="scope">
               <el-button v-if="scope.row.status == 0" @click="shClick(scope.row)" type="text" size="small">审核</el-button>
               <el-button @click="editClick(scope.row)" type="text" size="small" >详情</el-button>
+              <el-button @click="evaluateClick(scope.row)" type="text" size="small" >评论列表</el-button>
               <el-button @click="deleteClick(scope.row)" type="text" size="small">删除</el-button>
             </template>
           </el-table-column>
@@ -140,6 +147,17 @@
         this.getTableList();
       },
 
+      evaluateClick(item) {
+        let self = this;
+        let params = item.project_id;
+        this.$router.push({
+          path: '/plus/release/evaluate/list',
+          query: {
+            project_id: params
+          }
+        });
+      },
+
       /*打开编辑*/
       editClick(item) {
         this.userModel = deepClone(item);
diff --git a/shop_vue/src/views/plus/release/evaluate/list.vue b/shop_vue/src/views/plus/release/evaluate/list.vue
new file mode 100644
index 0000000..740a441
--- /dev/null
+++ b/shop_vue/src/views/plus/release/evaluate/list.vue
@@ -0,0 +1,174 @@
+<template>
+  <!--
+          作者:yj
+      -->
+  <div class="user">
+    <!--搜索表单-->
+    <div class="common-seach-wrap">
+      <el-form size="small" :inline="true" :model="searchForm" class="demo-form-inline">
+        <!-- <el-form-item label="类目">
+          <el-select size="small" v-model="searchForm.category_id" placeholder="所有分类">
+            <el-option label="全部" value="0"></el-option>
+            <el-option v-for="(item, index) in categoryList" :key="index" :label="item.name" :value="item.category_id">
+            </el-option>
+          </el-select>
+        </el-form-item> -->
+        <el-form-item label="用户id">
+          <el-input size="small" v-model="searchForm.user_id" placeholder="请输入用户id"></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="small" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button>
+          <el-button size="small" type="info" @click="cancelFunc">返回上一页</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
+    <!--内容-->
+    <div class="product-content">
+      <div class="table-wrap">
+        <el-table size="small" :data="tableData" border style="width: 100%" v-loading="loading">
+          <el-table-column prop="id" label="ID" width="100"></el-table-column>
+          <el-table-column prop="user.nickName" label="评论用户" width="200"></el-table-column>
+          <el-table-column prop="nickName" label="微信头像" width="100">
+            <template slot-scope="scope">
+              <img :src="scope.row.user.avatarUrl" width="30px" height="30px" />
+            </template>
+          </el-table-column>
+          <el-table-column prop="score_txt" label="评分" width="100"></el-table-column>
+          <el-table-column prop="status" label="图片" width="200">
+            <template slot-scope="scope">
+              <a style="margin-right:5px;" v-for="(item, index) in scope.row.image_list" target="_blank" :href="item.file_path"><img :src="item.file_path" width="30px" height="30px" /></a>
+            </template>
+          </el-table-column>
+          <el-table-column prop="evaluate_content" label="评语"></el-table-column>
+          <el-table-column fixed="right" label="操作" width="200">
+            <template slot-scope="scope">
+              <el-button @click="deleteClick(scope.row)" type="text" size="small">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <!--分页-->
+      <div class="pagination">
+        <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" background
+          :current-page="curPage" :page-size="pageSize" layout="total, prev, pager, next, jumper"
+          :total="totalDataNumber"></el-pagination>
+      </div>
+
+    </div>
+
+  </div>
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+  import {deepClone} from '@/utils/base.js';
+  export default {
+    components: {
+    },
+    data() {
+      return {
+        /*是否加载完成*/
+        loading: true,
+        /*一页多少条*/
+        pageSize: 10,
+        /*一共多少条数据*/
+        totalDataNumber: 0,
+        /*当前是第几页*/
+        curPage: 1,
+        /*列表数据*/
+        tableData: [],
+        /*横向表单数据模型*/
+        /*搜索参数*/
+        searchForm: {
+          user_id: '',
+          category_id: ''
+        },
+        project_id:''
+      };
+    },
+    created() {
+      /*获取列表*/
+      this.getTableList();
+
+    },
+    methods: {
+      /*选择第几页*/
+      handleCurrentChange(val) {
+        let self = this;
+        self.loading = true;
+        self.curPage = val;
+        self.getTableList();
+      },
+
+      /*每页多少条*/
+      handleSizeChange(val) {
+        this.pageSize = val;
+        this.getTableList();
+      },
+
+
+      /*获取列表*/
+      getTableList() {
+        let self = this;
+        let Params = self.searchForm;
+        Params.page = self.curPage;
+        Params.list_rows = self.pageSize;
+        Params.project_id = self.$route.query.project_id;;
+        PlusApi.evaluate(Params, true)
+          .then(data => {
+            self.loading = false;
+            self.tableData = data.data.list.data;
+            self.totalDataNumber = data.data.list.total;
+          })
+          .catch(error => {
+
+          });
+      },
+      /*搜索查询*/
+      onSubmit() {
+        this.curPage = 1;
+        this.getTableList();
+      },
+
+      cancelFunc() {
+        this.$router.back(-1);
+      },
+      /*删除*/
+      deleteClick(row) {
+        let self = this;
+        self.$confirm('此操作将永久删除该记录, 是否继续?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          self.loading = true;
+          PlusApi.evaluateDel({
+              id: row.id
+            }, true)
+            .then(data => {
+              self.loading = false;
+              if (data.code == 1) {
+                self.$message({
+                  message: data.msg,
+                  type: 'success'
+                });
+                self.getTableList();
+              } else {
+                self.$message.error('错了哦,这是一条错误消息');
+              }
+            })
+            .catch(error => {
+              self.loading = false;
+            });
+
+        }).catch(() => {
+
+        });
+      }
+
+    }
+  };
+</script>
+
+<style></style>
diff --git a/shop_vue/src/views/plus/release/grade/index.vue b/shop_vue/src/views/plus/release/grade/index.vue
new file mode 100644
index 0000000..6ba8213
--- /dev/null
+++ b/shop_vue/src/views/plus/release/grade/index.vue
@@ -0,0 +1,32 @@
+<template>
+  <!--
+      作者 yj
+  -->
+  <div class="common-seach-wrap">
+    <el-tabs v-model="activeName">
+      <el-tab-pane label="等级列表" name="list"></el-tab-pane>
+    </el-tabs>
+
+    <!--设置-->
+    <List v-if="activeName == 'list'"></List>
+
+  </div>
+</template>
+<script>
+import List from './part/list';
+export default {
+  components: {
+    List,
+  },
+  data() {
+    return {
+      activeName: 'list'
+    };
+  },
+  methods: {}
+};
+</script>
+
+<style>
+
+</style>
diff --git a/shop_vue/src/views/plus/release/grade/part/Add.vue b/shop_vue/src/views/plus/release/grade/part/Add.vue
new file mode 100644
index 0000000..637ba6c
--- /dev/null
+++ b/shop_vue/src/views/plus/release/grade/part/Add.vue
@@ -0,0 +1,136 @@
+<template>
+  <!--
+      作者 yj
+  -->
+  <el-dialog title="添加等级" :visible.sync="dialogVisible" @close='dialogFormVisible' :close-on-click-modal="false"
+    :close-on-press-escape="false" width="600px">
+    <el-form size="small" :model="form" ref="form">
+      <el-form-item label="等级名称" :label-width="formLabelWidth" prop="name" :rules="[{required: true,message: '请输入等级名称'}]">
+        <el-input v-model="form.name" placeholder="请输入等级名称"></el-input>
+      </el-form-item>
+      <el-form-item label="等级图标" :label-width="formLabelWidth" prop="img" :rules="[{required: true,message: ' '}]">
+        <el-row>
+          <el-button icon="el-icon-picture-outline" @click="openUpload('img')">选择图片</el-button>
+          <div v-if="form.img!=''" class="img">
+            <img :src="form.img" width="100" height="100" />
+          </div>
+        </el-row>
+      </el-form-item>
+      <el-form-item label="等级权重" :label-width="formLabelWidth" prop="weight" :rules="[{required: true,message: '请输入等级权重'}]">
+        <el-input v-model="form.weight" type="number" placeholder="请输入等级权重"></el-input>
+        <div class="gray9">权重越大,等级越高</div>
+      </el-form-item>
+      <el-form-item label="升级条件" :label-width="formLabelWidth">
+        <div class="gray9">0或不填均无法升级到该等级</div>
+        <div class="d-s-c mt16">
+          <span>累计好评达</span>
+          <el-input v-model="form.upgrade_num" type="number" style="width: 160px; margin-left: 10px;" ></el-input>
+          <span class="ml10">条</span>
+        </div>
+      </el-form-item>
+    </el-form>
+
+    <!--上传图片组件-->
+    <Upload v-if="isupload" :isupload="isupload" :type="type" @returnImgs="returnImgsFunc">上传图片</Upload>
+
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="dialogFormVisible">取 消</el-button>
+      <el-button type="primary" @click="addGrade()" :disabled="submit_loading">确 定</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+  import Upload from '@/components/file/Upload';
+  export default {
+    components: {
+      /*上传组件*/
+      Upload,
+    },
+    data() {
+      return {
+        form: {
+          /*昵称*/
+          name: '',
+          /*累计满*/
+          upgrade_num:0,
+          /*等级权重*/
+          weight: 100,
+          img:'',
+        },
+        /*左边长度*/
+        formLabelWidth: '120px',
+        /*是否显示*/
+        dialogVisible: false,
+        /*是否正在提交*/
+        submit_loading: false,
+        /*是否上传图片*/
+        isupload: false,
+      };
+    },
+    props: ['open_add'],
+    created() {
+      this.dialogVisible = this.open_add;
+    },
+    methods: {
+
+      /*添加等级*/
+      addGrade() {
+        let self = this;
+        let params = this.form;
+        self.$refs.form.validate((valid) => {
+          if (valid) {
+            self.submit_loading = true;
+            PlusApi.addgrade(params, true).then(data => {
+                self.submit_loading = false;
+                self.$message({
+                  message: data.msg,
+                  type: 'success'
+                });
+                self.dialogFormVisible(true);
+              })
+              .catch(error => {
+                self.submit_loading = false;
+              });
+          }
+        });
+      },
+      /*上传*/
+      openUpload(e) {
+        this.type = e;
+        this.isupload = true;
+      },
+      /*获取图片*/
+      returnImgsFunc(e) {
+        if (e != null && e.length > 0) {
+          if (this.type == 'img') {
+            this.form.img = e[0].file_path;
+          }
+        }
+        this.isupload = false;
+      },
+      /*取消*/
+      cancelFunc() {
+        this.$router.back(-1);
+      },
+      /*关闭弹窗*/
+      dialogFormVisible(e) {
+        if (e) {
+          this.$emit('closeDialog', {
+            type: 'success',
+            openDialog: false
+          })
+        } else {
+          this.$emit('closeDialog', {
+            type: 'error',
+            openDialog: false
+          })
+        }
+      }
+
+    }
+  };
+</script>
+
+<style></style>
diff --git a/shop_vue/src/views/plus/release/grade/part/Edit.vue b/shop_vue/src/views/plus/release/grade/part/Edit.vue
new file mode 100644
index 0000000..3dc7179
--- /dev/null
+++ b/shop_vue/src/views/plus/release/grade/part/Edit.vue
@@ -0,0 +1,131 @@
+<template>
+  <!--
+      作者 yj
+  -->
+  <el-dialog title="编辑等级" :visible.sync="dialogVisible" @close='dialogFormVisible' :close-on-click-modal="false"
+    :close-on-press-escape="false" width="600px">
+    <el-form size="small" :model="form" ref="form">
+      <el-form-item label="等级名称" :label-width="formLabelWidth" prop="name" :rules="[{required: true,message: ' '}]">
+        <el-input v-model="form.name" autocomplete="off"></el-input>
+      </el-form-item>
+      <el-form-item label="等级图标" :label-width="formLabelWidth" prop="img" :rules="[{required: true,message: ' '}]">
+        <el-row>
+          <el-button icon="el-icon-picture-outline" @click="openUpload('img')">选择图片</el-button>
+          <div v-if="form.img!='' && form.img!=null" class="img">
+            <img :src="form.img" width="100" height="100" />
+          </div>
+        </el-row>
+      </el-form-item>
+      <el-form-item label="等级权重" :label-width="formLabelWidth" prop="weight" :rules="[{required: true,message: '请输入等级权重'}]">
+        <el-input v-model="form.weight" type="number" placeholder="请输入等级权重"></el-input>
+        <div class="gray9">权重越大,等级越高</div>
+      </el-form-item>
+      <el-form-item label="升级条件" :label-width="formLabelWidth">
+        <div class="gray9">0或不填均无法升级到该等级</div>
+        <div class="d-s-c mt16">
+          <span>累计好评达</span>
+          <el-input v-model="form.upgrade_num" type="number" style="width: 160px; margin-left: 10px;" ></el-input>
+          <span class="ml10">条</span>
+        </div>
+      </el-form-item>
+    </el-form>
+
+    <!--上传图片组件-->
+    <Upload v-if="isupload" :isupload="isupload" :type="type" @returnImgs="returnImgsFunc">上传图片</Upload>
+
+
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="dialogFormVisible">取 消</el-button>
+      <el-button type="primary" @click="editGrade" :disabled="submit_loading">确 定</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+  import Upload from '@/components/file/Upload';
+  export default {
+    components: {
+      /*上传组件*/
+      Upload,
+    },
+    data() {
+      return {
+        /*左边长度*/
+        formLabelWidth: '120px',
+        /*是否显示*/
+        dialogVisible: false,
+        /*是否正在提交*/
+        submit_loading: false,
+        /*是否上传图片*/
+        isupload: false,
+      };
+    },
+    props: ['open_edit', 'form'],
+    created() {
+      this.dialogVisible = this.open_edit;
+    },
+    methods: {
+      /*修改用户*/
+      editGrade() {
+        let self = this;
+        let params = this.form;
+        self.$refs.form.validate((valid) => {
+          if (valid) {
+            self.submit_loading = true;
+            PlusApi.editGrade(params, true)
+              .then(data => {
+                self.submit_loading = false;
+                self.$message({
+                  message: '恭喜你,等级修改成功',
+                  type: 'success'
+                });
+                self.dialogFormVisible(true);
+
+              })
+              .catch(error => {
+                self.submit_loading = false;
+              });
+
+          }
+        });
+      },
+      /*上传*/
+      openUpload(e) {
+        this.type = e;
+        this.isupload = true;
+      },
+      /*获取图片*/
+      returnImgsFunc(e) {
+        if (e != null && e.length > 0) {
+          if (this.type == 'img') {
+            this.form.img = e[0].file_path;
+          }
+        }
+        this.isupload = false;
+      },
+      /*取消*/
+      cancelFunc() {
+        this.$router.back(-1);
+      },
+
+      /*关闭弹窗*/
+      dialogFormVisible(e) {
+        if (e) {
+          this.$emit('closeDialog', {
+            type: 'success',
+            openDialog: false
+          })
+        } else {
+          this.$emit('closeDialog', {
+            type: 'error',
+            openDialog: false
+          })
+        }
+      }
+
+    }
+  };
+</script>
+
+<style></style>
diff --git a/shop_vue/src/views/plus/release/grade/part/list.vue b/shop_vue/src/views/plus/release/grade/part/list.vue
new file mode 100644
index 0000000..83b4880
--- /dev/null
+++ b/shop_vue/src/views/plus/release/grade/part/list.vue
@@ -0,0 +1,189 @@
+<template>
+  <!--
+          作者 yj
+      -->
+  <div class="user">
+    <!--添加等级-->
+    <div class="common-level-rail">
+      <el-button size="small" type="primary" @click="addClick" icon="el-icon-plus" v-auth="'/plus/release/grade/add'">添加等级</el-button>
+    </div>
+
+    <!--内容-->
+    <div class="product-content">
+      <div class="table-wrap">
+        <el-table size="small" :data="tableData" border style="width: 100%" v-loading="loading">
+          <el-table-column prop="name" label="等级名称" width="300"></el-table-column>
+          <el-table-column prop="weight" label="权重"></el-table-column>
+          <el-table-column prop="upgrade_num" label="好评数量"></el-table-column>
+          <el-table-column fixed="right" label="操作" width="90">
+            <template slot-scope="scope">
+              <el-button @click="editClick(scope.row)" type="text" size="small" v-auth="'/plus/release/grade/edit'" >编辑</el-button>
+              <el-button @click="deleteClick(scope.row)" type="text" size="small"  v-auth="'/plus/release/grade/delete'">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <!--分页-->
+      <div class="pagination">
+        <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" background :current-page="curPage"
+          :page-size="pageSize" layout="total, prev, pager, next, jumper"
+          :total="totalDataNumber">
+        </el-pagination>
+      </div>
+    </div>
+
+    <!--添加-->
+    <Add v-if="open_add" :open_add="open_add" @closeDialog="closeDialogFunc($event, 'add')"></Add>
+
+    <!--编辑-->
+    <Edit v-if="open_edit" :open_edit="open_edit" :form="userModel" @closeDialog="closeDialogFunc($event, 'edit')"></Edit>
+  </div>
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+  import Edit from './Edit.vue';
+  import Add from './Add.vue';
+  import {deepClone} from '@/utils/base.js';
+  export default {
+    components: {
+      /*编辑组件*/
+      Edit,
+      Add
+    },
+    data() {
+      return {
+        /*是否加载完成*/
+        loading: true,
+        /*列表数据*/
+        tableData: [],
+        /*一页多少条*/
+        pageSize: 15,
+        /*一共多少条数据*/
+        totalDataNumber: 0,
+        /*当前是第几页*/
+        curPage: 1,
+        /*横向表单数据模型*/
+        formInline: {
+          user: '',
+        },
+        /*是否打开添加弹窗*/
+        open_add: false,
+        /*是否打开编辑弹窗*/
+        open_edit: false,
+        /*当前编辑的对象*/
+        userModel: {}
+      };
+    },
+    created() {
+
+      /*获取列表*/
+      this.getTableList();
+
+    },
+    methods: {
+
+      /*换行*/
+      keepTextStyle(val){
+        let str=val.replace(/(\\r\\n)/g,'<br/>');
+        return str;
+      },
+
+      /*选择第几页*/
+      handleCurrentChange(val) {
+        let self = this;
+        self.curPage = val;
+        self.loading = true;
+        self.getTableList();
+      },
+
+      /*每页多少条*/
+      handleSizeChange(val) {
+        this.curPage = 1;
+        this.pageSize = val;
+        this.getTableList();
+      },
+
+      /*获取列表*/
+      getTableList() {
+        let self = this;
+        let Params = {};
+        Params.page = self.curPage;
+        Params.list_rows = self.pageSize;
+        PlusApi.gradelist(Params, true)
+          .then(data => {
+            self.loading = false;
+            self.tableData = data.data.list.data;
+            self.totalDataNumber = data.data.list.total
+          })
+          .catch(error => {
+
+          });
+      },
+
+      /*打开添加*/
+      addClick() {
+        this.open_add = true;
+      },
+
+      /*打开编辑*/
+      editClick(item) {
+        this.userModel = deepClone(item);
+        this.open_edit = true;
+      },
+
+      /*关闭弹窗*/
+      closeDialogFunc(e, f) {
+        if (f == 'add') {
+          this.open_add = e.openDialog;
+          if (e.type == 'success') {
+            this.getTableList();
+          }
+        }
+        if (f == 'edit') {
+          this.open_edit = e.openDialog;
+          if (e.type == 'success') {
+            this.getTableList();
+          }
+        }
+      },
+
+      /*删除用户*/
+      deleteClick(row) {
+        let self = this;
+        self.$confirm('此操作将永久删除该记录, 是否继续?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          self.loading = true;
+          PlusApi.deletegrade({
+              grade_id: row.grade_id
+            }, true)
+            .then(data => {
+              self.loading = false;
+              if (data.code == 1) {
+                self.$message({
+                  message: data.msg,
+                  type: 'success'
+                });
+                self.getTableList();
+              } else {
+                self.$message.error('错了哦,这是一条错误消息');
+              }
+            })
+            .catch(error => {
+              self.loading = false;
+            });
+
+        }).catch(() => {
+
+        });
+      }
+
+    }
+  };
+</script>
+
+<style></style>
diff --git a/shop_vue/src/views/plus/release/index.vue b/shop_vue/src/views/plus/release/index.vue
index 851590c..942e551 100644
--- a/shop_vue/src/views/plus/release/index.vue
+++ b/shop_vue/src/views/plus/release/index.vue
@@ -14,6 +14,7 @@
     <Tag v-if="activeName == 'tag'"></Tag>
     <Cash v-if="activeName == 'cash'"></Cash>
     <Setting v-if="activeName == 'setting'"></Setting>
+    <Grade v-if="activeName == 'grade'"></Grade>
   </div>
 </template>
 <script>
@@ -30,6 +31,7 @@
 import Tag from './tag/index';
 import Cash from './cash/Cash';
 import Setting from './setting/Setting';
+import Grade from './grade/index';
 
 
 export default {
@@ -45,6 +47,7 @@
     Tag,
     Cash,
     Setting,
+    Grade,
   },
   data() {
     return {
@@ -86,10 +89,15 @@
           value: '供应发布',
           path:'/plus/release/supplyproject/index'
         },
+        // {
+        //   key: 'order',
+        //   value: '用户订单',
+        //   path:'/plus/release/order/Order'
+        // },
         {
-          key: 'order',
-          value: '用户订单',
-          path:'/plus/release/order/Order'
+          key: 'grade',
+          value: '信誉等级',
+          path:'/plus/release/grade/index'
         },
         {
           key: 'category',
@@ -101,11 +109,11 @@
           value: '标签列表',
           path:'/plus/release/tag/index'
         },
-        {
-          key: 'cash',
-          value: '提现列表',
-          path:'/plus/release/cash/Cash'
-        },
+        // {
+        //   key: 'cash',
+        //   value: '提现列表',
+        //   path:'/plus/release/cash/Cash'
+        // },
         {
           key: 'setting',
           value: '发布设置',
diff --git a/shop_vue/src/views/plus/release/setting/Setting.vue b/shop_vue/src/views/plus/release/setting/Setting.vue
index 5d85a75..4c861b6 100644
--- a/shop_vue/src/views/plus/release/setting/Setting.vue
+++ b/shop_vue/src/views/plus/release/setting/Setting.vue
@@ -1,7 +1,7 @@
 <template>
   <div v-loading="loading">
     <el-tabs size="small" v-model="activeName" type="card" @tab-click="handleClick">
-      <el-tab-pane label="结算" name="settlement"></el-tab-pane>
+      <el-tab-pane label="设置" name="settlement"></el-tab-pane>
     </el-tabs>
 
     <!--结算-->
diff --git a/shop_vue/src/views/plus/release/setting/part/Settlement.vue b/shop_vue/src/views/plus/release/setting/part/Settlement.vue
index 71d38fe..55a873f 100644
--- a/shop_vue/src/views/plus/release/setting/part/Settlement.vue
+++ b/shop_vue/src/views/plus/release/setting/part/Settlement.vue
@@ -7,27 +7,25 @@
     <!--form表单-->
     <el-form size="small" ref="form" :model="form" label-width="200px">
 
-      <el-form-item label="提现方式">
-        <el-checkbox-group v-model="form.pay_type">
-          <el-checkbox v-for="(item,index) in list" :label="item.id" :key="index">{{item.name}}</el-checkbox>
-        </el-checkbox-group>
-        <div class="tips">注:如使用微信支付,则需申请微信支付企业付款到零钱功能</div>
-      </el-form-item>
-      <el-form-item label="订单抽成" prop="order_rate" :rules="[{required: true,message: ' '}]">
-        <el-input v-model="form.order_rate" type="number" class="max-w460">
-           <template slot="append">%</template>
+      <el-form-item label="供应方发布消耗" prop="supply_price" :rules="[{required: true,message: ' '}]">
+        <el-input v-model="form.supply_price" type="number" class="max-w460">
+           <template slot="append">连盟币</template>
         </el-input>
       </el-form-item>
-      <el-form-item label="佣金提现手续费" prop="fee_rate" :rules="[{required: true,message: ' '}]">
-        <el-input v-model="form.fee_rate" type="number" class="max-w460">
-           <template slot="append">%</template>
+      <el-form-item label="需求方发布消耗" prop="demand_price" :rules="[{required: true,message: ' '}]">
+        <el-input v-model="form.demand_price" type="number" class="max-w460">
+           <template slot="append">连盟币</template>
         </el-input>
       </el-form-item>
-      <el-form-item label="最低提现额度" prop="min_money" :rules="[{required: true,message: ' '}]">
-        <el-input v-model="form.min_money" type="number" class="max-w460"></el-input>
+      <el-form-item label="开通查看信息权限" prop="check_price" :rules="[{required: true,message: ' '}]">
+        <el-input v-model="form.check_price" type="number" class="max-w460">
+           <template slot="append">连盟币</template>
+        </el-input>
       </el-form-item>
-      <el-form-item label="提现说明">
-        <el-input v-model="form.explain" type="textarea" rows="5" class="max-w460"></el-input>
+      <el-form-item label="评论奖励" prop="eve_money" :rules="[{required: true,message: ' '}]">
+        <el-input v-model="form.eve_money" type="number" class="max-w460">
+           <template slot="append">连盟币</template>
+        </el-input>
       </el-form-item>
 
 
diff --git "a/shop_vue/src/views/plus/release/setting/part/Settlement\345\244\207\344\273\275\345\217\257\345\210\240.vue" "b/shop_vue/src/views/plus/release/setting/part/Settlement\345\244\207\344\273\275\345\217\257\345\210\240.vue"
new file mode 100644
index 0000000..71d38fe
--- /dev/null
+++ "b/shop_vue/src/views/plus/release/setting/part/Settlement\345\244\207\344\273\275\345\217\257\345\210\240.vue"
@@ -0,0 +1,104 @@
+<template>
+  <!--
+      	作者:yj
+      -->
+  <div class="mt30">
+
+    <!--form表单-->
+    <el-form size="small" ref="form" :model="form" label-width="200px">
+
+      <el-form-item label="提现方式">
+        <el-checkbox-group v-model="form.pay_type">
+          <el-checkbox v-for="(item,index) in list" :label="item.id" :key="index">{{item.name}}</el-checkbox>
+        </el-checkbox-group>
+        <div class="tips">注:如使用微信支付,则需申请微信支付企业付款到零钱功能</div>
+      </el-form-item>
+      <el-form-item label="订单抽成" prop="order_rate" :rules="[{required: true,message: ' '}]">
+        <el-input v-model="form.order_rate" type="number" class="max-w460">
+           <template slot="append">%</template>
+        </el-input>
+      </el-form-item>
+      <el-form-item label="佣金提现手续费" prop="fee_rate" :rules="[{required: true,message: ' '}]">
+        <el-input v-model="form.fee_rate" type="number" class="max-w460">
+           <template slot="append">%</template>
+        </el-input>
+      </el-form-item>
+      <el-form-item label="最低提现额度" prop="min_money" :rules="[{required: true,message: ' '}]">
+        <el-input v-model="form.min_money" type="number" class="max-w460"></el-input>
+      </el-form-item>
+      <el-form-item label="提现说明">
+        <el-input v-model="form.explain" type="textarea" rows="5" class="max-w460"></el-input>
+      </el-form-item>
+
+
+      <!--提交-->
+      <div class="common-button-wrapper">
+        <el-button size="small" type="primary" @click="onSubmit" :loading="loading">提交</el-button>
+      </div>
+    </el-form>
+  </div>
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+
+  export default {
+    data() {
+      return {
+        /*form表单数据*/
+        form: {
+          pay_type: [
+            10
+          ],
+          explain:'',
+        },
+        list: [],
+        selectlist: [
+          10
+        ],
+        loading: false,
+      };
+    },
+    props: {
+      settingData: Object
+    },
+    created() {
+      this.form=this.settingData.data.settlement.values;
+      this.list = this.settingData.pay_type;
+    },
+
+    methods: {
+
+      /*提交表单*/
+      onSubmit() {
+        let self = this;
+        let params = self.form;
+        self.$refs.form.validate((valid) => {
+          if (valid) {
+            self.loading = true;
+            PlusApi.settlement({
+                form: params
+              }, true)
+              .then(data => {
+                self.loading = false;
+                self.$message({
+                  message: '恭喜你,设置成功',
+                  type: 'success'
+                });
+
+              })
+              .catch(error => {
+                self.loading = false;
+              });
+          }
+        });
+      },
+
+    }
+
+  };
+</script>
+
+<style>
+
+</style>
diff --git a/shop_vue/src/views/plus/release/supply/user/User.vue b/shop_vue/src/views/plus/release/supply/user/User.vue
index b542076..f426960 100644
--- a/shop_vue/src/views/plus/release/supply/user/User.vue
+++ b/shop_vue/src/views/plus/release/supply/user/User.vue
@@ -25,11 +25,17 @@
           <el-table-column prop="real_name" label="姓名" width="100"></el-table-column>
           <el-table-column prop="mobile" label="手机号"></el-table-column>
          <!-- <el-table-column prop="detail" label="地址"></el-table-column> -->
+         <el-table-column prop="" label="会员等级">
+           <template slot-scope="scope">
+             <span v-if="scope.row.grade_id == 0">无等级</span>
+             <span v-else>{{ scope.row.grade.name }}</span>
+           </template>
+         </el-table-column>
           <el-table-column prop="create_time" label="成为时间" width="140"></el-table-column>
           <el-table-column fixed="right" label="操作" width="160">
             <template slot-scope="scope">
               <div>
-                <el-button @click="saleClick(scope.row)" type="text" size="small">供应订单</el-button>
+                <!-- <el-button @click="saleClick(scope.row)" type="text" size="small">供应订单</el-button> -->
                 <el-button @click="EditClick(scope.row)" type="text" size="small">修改</el-button>
                 <el-button @click="delClick(scope.row)" type="text" size="small">删除</el-button>
               </div>
@@ -53,7 +59,7 @@
     </div>
 
     <!--编辑-->
-    <Edit :open_edit="open_edit" :userModel="userModel" @close="closeEditFunc"></Edit>
+    <Edit :open_edit="open_edit" :userModel="userModel"  :gradeList="gradeList" @close="closeEditFunc"></Edit>
 
   </div>
 </template>
@@ -88,6 +94,8 @@
       userModel:{},
       /*是否打开修改*/
       open_edit:false,
+      /*等级*/
+      gradeList: [],
     };
   },
   created() {
@@ -117,6 +125,7 @@
           self.loading = false;
           self.tableData = data.data.list.data;
           self.totalDataNumber = data.data.list.total;
+          self.gradeList = data.data.grade;
         })
         .catch(error => {
           self.loading = false;
diff --git a/shop_vue/src/views/plus/release/supply/user/dialog/Edit.vue b/shop_vue/src/views/plus/release/supply/user/dialog/Edit.vue
index d99c6f7..7541eb9 100644
--- a/shop_vue/src/views/plus/release/supply/user/dialog/Edit.vue
+++ b/shop_vue/src/views/plus/release/supply/user/dialog/Edit.vue
@@ -1,8 +1,6 @@
 <template>
   <!--
       	作者:yj
-      	时间:2023-04-11
-      	描述:售后维修-维修师傅-编辑
       -->
   <el-dialog title="编辑" :visible.sync="dialogVisible" @close="cancelFunc" :close-on-click-modal="false" :close-on-press-escape="false" width="60%">
     <el-form :model="formData">
@@ -17,6 +15,11 @@
       </el-form-item>
       <el-form-item label="手机号" :label-width="formLabelWidth">
         <el-input type="text" v-model="formData.mobile" autocomplete="off"></el-input>
+      </el-form-item>
+      <el-form-item label="等级" :label-width="formLabelWidth">
+        <el-select v-model="formData.grade_id" placeholder="-请选择等级-">
+          <el-option v-for="(item,index) in gradeList" :key="index" :label="item.name" :value="item.grade_id"></el-option>
+        </el-select>
       </el-form-item>
     </el-form>
     <div slot="footer" class="dialog-footer">
@@ -40,10 +43,7 @@
       formData: {},
     };
   },
-  props: {
-    open_edit: Boolean,
-    userModel: Object
-  },
+  props: ['open_edit','userModel','gradeList'],
   watch: {
     open_edit: function(n, o) {
       if (n != o) {
@@ -65,6 +65,7 @@
       params.user_id= this.formData.user_id;
       params.real_name=this.formData.real_name;
       params.mobile=this.formData.mobile;
+      params.grade_id=this.formData.grade_id;
       PlusApi.supplyUserEdit(params, true)
         .then(data => {
           self.$message({
diff --git a/shop_vue/src/views/plus/release/supplyproject/index.vue b/shop_vue/src/views/plus/release/supplyproject/index.vue
index e269472..859c674 100644
--- a/shop_vue/src/views/plus/release/supplyproject/index.vue
+++ b/shop_vue/src/views/plus/release/supplyproject/index.vue
@@ -36,10 +36,11 @@
               <span v-if="scope.row.status == 2" class="green">已驳回</span>
             </template>
           </el-table-column>
-          <el-table-column fixed="right" label="操作" width="150">
+          <el-table-column fixed="right" label="操作" width="200">
             <template slot-scope="scope">
               <el-button v-if="scope.row.status == 0" @click="shClick(scope.row)" type="text" size="small">审核</el-button>
               <el-button @click="editClick(scope.row)" type="text" size="small" >详情</el-button>
+              <el-button @click="evaluateClick(scope.row)" type="text" size="small" >评论列表</el-button>
               <el-button @click="deleteClick(scope.row)" type="text" size="small">删除</el-button>
             </template>
           </el-table-column>
@@ -118,6 +119,17 @@
         this.getTableList();
       },
 
+      evaluateClick(item) {
+        let self = this;
+        let params = item.project_id;
+        this.$router.push({
+          path: '/plus/release/evaluate/list',
+          query: {
+            project_id: params
+          }
+        });
+      },
+
 
       /*获取列表*/
       getTableList() {
diff --git a/shop_vue/src/views/plus/vip/setting/part/Basic.vue b/shop_vue/src/views/plus/vip/setting/part/Basic.vue
index 6e2857c..4e40090 100644
--- a/shop_vue/src/views/plus/vip/setting/part/Basic.vue
+++ b/shop_vue/src/views/plus/vip/setting/part/Basic.vue
@@ -53,7 +53,7 @@
         <div class="tips">用户直推指定数量的用户后,即可享受平台佣金</div>
       </el-form-item>
 
-      <el-form-item label="见点奖条件" name="second">
+      <el-form-item label="复购专区奖条件" name="second">
         <label>推荐VIP会员人数</label>
         <el-input v-model="form.viewpoint_buy_count" type="number" class="max-w460">
           <template slot="append">人</template>
@@ -62,7 +62,22 @@
         <el-input v-model="form.repurchase_consumption" type="number" class="max-w460">
           <template slot="append">元</template>
         </el-input>
-        <div class="tips">用户满足条件后,即可享受见点奖</div>
+        <div class="tips">用户满足条件后,即可享复购专区奖</div>
+      </el-form-item>
+      <el-form-item label="下级收益补贴条件" name="second">
+        <label>直推指定等级</label>
+        <el-select v-model="form.referee_grade_ids" multiple style="width: 160px; margin-left: 10px;">
+          <el-option
+            v-for="item in userGradeList"
+            :key="item.grade_id"
+            :label="item.name"
+            :value="item.grade_id">
+          </el-option>
+        </el-select>
+        <label>直推人数</label>
+        <el-input v-model="form.referee_grade_count" type="number"  style="width: 160px; margin-left: 10px;" ></el-input>
+        <span class="ml10">人</span>
+        <div class="tips">直推多少用户指定会员等级后,即可享受享受下级收益补贴</div>
       </el-form-item>
       <!--提交-->
       <div class="common-button-wrapper">
@@ -77,6 +92,7 @@
 <script>
 import PlusApi from '@/api/plus/vip.js';
 import Product from '@/components/product/Product';
+import UserApi from '@/api/user.js';
 
 export default {
   components: {
@@ -95,6 +111,7 @@
         pjaward: '0',
         pjaward_level: '1'
       },
+      userGradeList:[],
       /*是否打开产品弹出层*/
       isproduct: false,
       /*是否正在加载*/
@@ -106,9 +123,23 @@
   },
   created() {
     this.form = this.settingData.data.basic.values;
-    console.log(this.form)
+    console.log(this.form.referee_grade_ids);
+    // 等级id转换成数组
+    for (let i = 0; i < this.form.referee_grade_ids.length; i++) {
+      this.form.referee_grade_ids[i] = parseInt(this.form.referee_grade_ids[i]);
+    }
+    this.getUserGradeList();
   },
   methods: {
+    /*获取用户管理模块的等级列表*/
+    getUserGradeList() {
+      let self = this;
+      UserApi.gradelist({}, true)
+        .then(res => {
+          self.userGradeList = res.data.list.data || res.data.list;
+        })
+        .catch(error => {});
+    },
     /*提交表单*/
     onSubmit() {
       let self = this;
diff --git a/shop_vue/src/views/plus/vip/user/User.vue b/shop_vue/src/views/plus/vip/user/User.vue
index 336588e..6ea1935 100644
--- a/shop_vue/src/views/plus/vip/user/User.vue
+++ b/shop_vue/src/views/plus/vip/user/User.vue
@@ -50,6 +50,7 @@
         <el-table-column prop="create_time" label="成为时间" width="140"> </el-table-column>
         <el-table-column fixed="right" label="操作" width="120">
           <template slot-scope="scope">
+            <el-button @click="openSubUser(scope.row)" type="text" size="small" >下级用户</el-button>
             <el-button @click="detailedClick(scope.row)" type="text" size="small">提现明细</el-button>
             <el-button @click="editClick(scope.row)" type="text" size="small">修改</el-button>
           </template>
@@ -72,12 +73,15 @@
 
     <!--编辑用户-->
     <Edit :open_edit="open_edit" :userModel="userModel" @close="closeEditFunc"></Edit>
+    <!--查看下级用户-->
+    <SubUser :open_dialog="open_dialog" :userModel="userModel" @close="closeFunc"></SubUser>
   </div>
 </template>
 
 <script>
 import vipApi from '@/api/plus/vip.js';
 import Edit from './dialog/Edit';
+import SubUser from './dialog/SubUser.vue';
 
 export default {
   data() {
@@ -92,11 +96,13 @@
       pageSize: 10,
       /*是否打开编辑*/
       open_edit: false,
+      open_dialog: false,
       /*当前编辑的用户模型*/
       userModel: {}
     };
   },
   components: {
+    SubUser,
     Edit
   },
   created() {
@@ -143,6 +149,16 @@
         }
       });
     },
+    /*打开下级用户弹窗*/
+    openSubUser(e){
+      this.userModel=e;
+      this.open_dialog=true;
+    },
+
+    /*关闭下级用户弹窗*/
+    closeFunc(){
+      this.open_dialog=false;
+    },
 
     /*修改点击*/
     editClick(item) {
diff --git a/shop_vue/src/views/plus/vip/user/dialog/SubUser.vue b/shop_vue/src/views/plus/vip/user/dialog/SubUser.vue
new file mode 100644
index 0000000..72834e5
--- /dev/null
+++ b/shop_vue/src/views/plus/vip/user/dialog/SubUser.vue
@@ -0,0 +1,136 @@
+<template>
+  <!--
+      	作者:luoyiming
+      	时间:2020-06-01
+      	描述:插件中心-分销-分销商用户-查看下级用户
+      -->
+  <div>
+    <el-dialog title="下级用户" :visible.sync="dialogVisible" @close="dialogFormVisible" :close-on-click-modal="true" :close-on-press-escape="false">
+      <el-radio-group v-model="level" size="small" @change="changFunc">
+        <el-radio-button label="1">一级</el-radio-button>
+        <el-radio-button label="2">二级</el-radio-button>
+        <el-radio-button label="3">三级</el-radio-button>
+      </el-radio-group>
+
+      <!--table-->
+      <div class="mt16">
+        <el-table size="small" :data="tableData" border style="width: 100%" v-loading="loading">
+          <el-table-column prop="user_id" label="用户ID"></el-table-column>
+          <el-table-column prop="nickName" label="微信头像">
+            <template slot-scope="scope">
+              <img class="radius" v-img-url="scope.row.user.avatarUrl" width="30" height="30" />
+            </template>
+          </el-table-column>
+          <el-table-column prop="user.nickName" label="	微信昵称"></el-table-column>
+          <el-table-column prop="user.grade.name" label="	用户等级"></el-table-column>
+          <el-table-column prop="user.mobile" label="手机号"></el-table-column>
+          <el-table-column prop="create_time" label="加入时间"></el-table-column>
+        </el-table>
+      </div>
+
+      <!--分页-->
+      <div class="pagination">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          background
+          :current-page="curPage"
+          :page-size="pageSize"
+          layout="total, prev, pager, next, jumper"
+          :total="totalDataNumber"
+        ></el-pagination>
+      </div>
+
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import PlusApi from '@/api/plus.js';
+export default {
+  data() {
+    return {
+      /*是否显示*/
+      dialogVisible: false,
+      /*是否正在加载*/
+      loading:true,
+      /*当前第几级*/
+      level: '1',
+      /*列表数据*/
+      tableData: [],
+      /*一页多少条*/
+      pageSize: 20,
+      /*一共多少条数据*/
+      totalDataNumber: 0,
+      /*当前是第几页*/
+      curPage: 1
+    };
+  },
+  props: {
+    open_dialog: Boolean,
+    userModel:Object
+  },
+  watch: {
+    open_dialog: function(n, o) {
+      if (n != o) {
+        this.dialogVisible = this.open_dialog;
+        if(n){
+          this.getData();
+        }
+      }
+    }
+  },
+  created() {
+
+  },
+  methods: {
+
+    /*切换等级*/
+    changFunc(e){
+      this.getData();
+    },
+
+    /*选择第几页*/
+    handleCurrentChange(val) {
+      let self = this;
+      self.curPage = val;
+      self.loading = true;
+      self.getData();
+    },
+
+    /*获取数据*/
+    getData() {
+      let self = this;
+      let Params = {};
+      Params.page = self.curPage;
+      Params.list_rows = self.pageSize;
+      Params.user_id=self.userModel.user_id;
+      Params.level=self.level;
+      PlusApi.agentUserFans(Params, true)
+        .then(data => {
+          self.loading = false;
+          self.tableData = data.data.list.data;
+        })
+        .catch(error => {});
+    },
+
+    /*每页多少条*/
+    handleSizeChange(val) {
+      this.curPage = 1;
+      this.pageSize = val;
+      this.getData();
+    },
+
+    /*关闭弹窗*/
+    dialogFormVisible(e) {
+      this.$emit('close', {});
+    }
+  }
+};
+</script>
+
+<style scoped>
+.el-dialog__body {
+  padding: 10px 20px;
+}
+</style>
diff --git a/shop_vue/src/views/supplier/supplier/add.vue b/shop_vue/src/views/supplier/supplier/add.vue
index 9be50da..eb65dd5 100644
--- a/shop_vue/src/views/supplier/supplier/add.vue
+++ b/shop_vue/src/views/supplier/supplier/add.vue
@@ -67,6 +67,12 @@
         </div>
         <div class="tips">如设置了是,则该商户的订单按该商户后台设置的支付信息来收款</div>
       </el-form-item>
+      <el-form-item label="供需权限">
+        <el-radio-group v-model="form.supplier.is_release">
+          <el-radio :label="0">否</el-radio>
+          <el-radio :label="1">是</el-radio>
+        </el-radio-group>
+      </el-form-item>
       <el-form-item label="是否是新人专区" :label-width="formLabelWidth">
         <el-radio-group v-model="form.supplier.is_newcomer">
           <el-radio :label="1">是</el-radio>
@@ -193,8 +199,9 @@
             commission_rate:0,
             area_id:'',
             is_independent:0,
-            is_newcomer:0
-            ,is_repurchase:0
+            is_release:0,
+            is_newcomer:0,
+            is_repurchase:0
           },
         },
         logo_file_path: '',
diff --git a/shop_vue/src/views/supplier/supplier/edit.vue b/shop_vue/src/views/supplier/supplier/edit.vue
index 70eea3c..9a7176b 100644
--- a/shop_vue/src/views/supplier/supplier/edit.vue
+++ b/shop_vue/src/views/supplier/supplier/edit.vue
@@ -73,6 +73,12 @@
         </div>
         <div class="tips">如设置了是,则该商户的订单按该商户后台设置的支付信息来收款</div>
       </el-form-item>
+      <el-form-item label="供需权限">
+        <el-radio-group v-model="form.supplier.is_release">
+          <el-radio :label="0">否</el-radio>
+          <el-radio :label="1">是</el-radio>
+        </el-radio-group>
+      </el-form-item>
       <el-form-item label="是否是新人专区" :label-width="formLabelWidth">
         <el-radio-group v-model="form.supplier.is_newcomer">
           <el-radio :label="1">是</el-radio>
@@ -173,7 +179,8 @@
             area_id:'',
             is_independent:0,
             is_newcomer:0,
-            is_repurchase:0
+            is_repurchase:0,
+            is_release:0
           },
         },
         logo_file_path: '',
diff --git a/supplier_vue/src/api/plus/release.js b/supplier_vue/src/api/plus/release.js
new file mode 100644
index 0000000..afb1174
--- /dev/null
+++ b/supplier_vue/src/api/plus/release.js
@@ -0,0 +1,178 @@
+import request from '@/utils/request'
+
+let PlusApi = {
+
+    /*需求方申请列表*/
+    demandApplyList(data, errorback) {
+        return request._post('/supplier/plus.release.demandApply/index', data, errorback);
+    },
+    /*审核*/
+    editDemandApplyStatus(data, errorback) {
+        return request._post('/supplier/plus.release.demandApply/editApplyStatus', data, errorback);
+    },
+    /*列表*/
+    demandUserList(data, errorback) {
+        return request._post('/supplier/plus.release.demandUser/index', data, errorback);
+    },
+    /*修改*/
+    demandUserEdit(data, errorback) {
+        return request._post('/supplier/plus.release.demandUser/edit', data, errorback);
+    },
+    /*删除*/
+    deleteDemandUser(data, errorback) {
+        return request._post('/supplier/plus.release.demandUser/delete', data, errorback);
+    },
+
+    /*供应方申请列表*/
+    supplyApplyList(data, errorback) {
+        return request._post('/supplier/plus.release.supplyApply/index', data, errorback);
+    },
+    /*审核*/
+    editSupplyApplyStatus(data, errorback) {
+        return request._post('/supplier/plus.release.supplyApply/editApplyStatus', data, errorback);
+    },
+    /*列表*/
+    supplyUserList(data, errorback) {
+        return request._post('/supplier/plus.release.supplyUser/index', data, errorback);
+    },
+    /*修改*/
+    supplyUserEdit(data, errorback) {
+        return request._post('/supplier/plus.release.supplyUser/edit', data, errorback);
+    },
+    /*删除*/
+    deleteSupplyUser(data, errorback) {
+        return request._post('/supplier/plus.release.supplyUser/delete', data, errorback);
+    },
+    /*分类管理*/
+    catList(data, errorback) {
+        return request._post('/supplier/plus.release.ReleaseCategory/index', data, errorback);
+    },
+    /*分类添加*/
+    catAdd(data, errorback) {
+        return request._post('/supplier/plus.release.ReleaseCategory/add', data, errorback);
+    },
+    /*分类删除*/
+    catDel(data, errorback) {
+        return request._post('/supplier/plus.release.ReleaseCategory/delete', data, errorback);
+    },
+    /*分类修改*/
+    catEdit(data, errorback) {
+        return request._post('/supplier/plus.release.ReleaseCategory/edit', data, errorback);
+    },
+    /*获取标签*/
+    Tag(data, errorback) {
+      return request._post('/supplier/plus.release.Tag/index', data, errorback);
+    },
+    /*添加标签*/
+      addTag(data, errorback) {
+      return request._post('/supplier/plus.release.Tag/add', data, errorback);
+    },
+      /*编辑标签*/
+      editTag(data, errorback) {
+      return request._post('/supplier/plus.release.Tag/edit', data, errorback);
+    },
+      /*删除标签*/
+      deleteTag(data, errorback) {
+      return request._post('/supplier/plus.release.Tag/delete', data, errorback);
+    },
+    /*需求发布列表*/
+    demandProject(data, errorback) {
+        return request._post('/supplier/plus.release.DemandProject/index', data, errorback);
+    },
+    demandProjectSubmit(data, errorback) {
+        return request._post('/supplier/plus.release.demandProject/submit', data, errorback);
+    },
+    /*删除*/
+    demandDel(data, errorback) {
+        return request._post('/supplier/plus.release.DemandProject/delete', data, errorback);
+    },
+    /*详情*/
+    demandEdit(data, errorback) {
+        return request._post('/supplier/plus.release.DemandProject/edit', data, errorback);
+    },
+    /*供应发布列表*/
+    supplyProject(data, errorback) {
+        return request._post('/supplier/plus.release.supplyProject/index', data, errorback);
+    },
+    /*审核*/
+    supplyProjectSubmit(data, errorback) {
+        return request._post('/supplier/plus.release.supplyProject/submit', data, errorback);
+    },
+    /*删除*/
+    supplyDel(data, errorback) {
+        return request._post('/supplier/plus.release.supplyProject/delete', data, errorback);
+    },
+    /*详情*/
+    supplyEdit(data, errorback) {
+        return request._post('/supplier/plus.release.supplyProject/edit', data, errorback);
+    },
+    /*订单列表*/
+    releaseOrder(data, errorback) {
+        return request._post('/supplier/plus.release.order/index', data, errorback);
+    },
+    onCash(data, errorback) {
+        return request._post('/supplier/plus.release.order/onCash', data, errorback);
+    },
+    onFinish(data, errorback) {
+        return request._post('/supplier/plus.release.order/onFinish', data, errorback);
+    },
+    onCancel(data, errorback) {
+        return request._post('/supplier/plus.release.order/onCancel', data, errorback);
+    },
+    /*提现申请*/
+    cash(data, errorback) {
+        return request._post('/supplier/plus.release.cash/index', data, errorback);
+    },
+    /*提现审核*/
+    cashSubmit(data, errorback) {
+        return request._post('/supplier/plus.release.cash/submit', data, errorback);
+    },
+    /*微信打款*/
+    WxPay(data, errorback) {
+        return request._post('/supplier/plus.release.cash/wechat_pay', data, errorback);
+    },
+    /*付呗分账打款*/
+    FbPay(data, errorback) {
+        return request._post('/supplier/plus.release.cash/fb_pay', data, errorback);
+    },
+    /*确认打款*/
+    money(data, errorback) {
+        return request._post('/supplier/plus.release.cash/money', data, errorback);
+    },
+
+    /*设置*/
+    releaseSet(data, errorback) {
+        return request._post('/supplier/plus.release.setting/index', data, errorback);
+    },
+    /*佣金设置*/
+    settlement(data, errorback) {
+        return request._post('/supplier/plus.release.setting/settlement', data, errorback);
+    },
+    /*等级列表*/
+    gradelist(data, errorback) {
+        return request._post('/supplier/plus.release.grade/index', data, errorback);
+    },
+    /*添加等级*/
+    addgrade(data, errorback) {
+        return request._post('/supplier/plus.release.grade/add', data, errorback);
+    },
+    /*修改等级*/
+    editGrade(data, errorback) {
+        return request._post('/supplier/plus.release.grade/edit', data, errorback);
+    },
+    /*删除等级*/
+    deletegrade(data, errorback) {
+        return request._post('/supplier/plus.release.grade/delete', data, errorback);
+    },
+    /*评论列表*/
+    evaluate(data, errorback) {
+        return request._post('/supplier/plus.release.evaluate/list', data, errorback);
+    },
+    /*删除*/
+    evaluateDel(data, errorback) {
+        return request._post('/supplier/plus.release.evaluate/delete', data, errorback);
+    },
+
+}
+
+export default PlusApi;
diff --git a/supplier_vue/src/views/plus/bonus/index.vue b/supplier_vue/src/views/plus/bonus/index.vue
index ebdc3e8..8d392ff 100644
--- a/supplier_vue/src/views/plus/bonus/index.vue
+++ b/supplier_vue/src/views/plus/bonus/index.vue
@@ -95,9 +95,8 @@
     }
   },
   created() {
-    setTimeout(()=>{
-      this.init();
-    },100)
+
+    this.init();
 
   },
   beforeDestroy() {
diff --git a/supplier_vue/src/views/plus/bonus/setting/part/Basic.vue b/supplier_vue/src/views/plus/bonus/setting/part/Basic.vue
index 8edf173..4e3af3d 100644
--- a/supplier_vue/src/views/plus/bonus/setting/part/Basic.vue
+++ b/supplier_vue/src/views/plus/bonus/setting/part/Basic.vue
@@ -74,6 +74,21 @@
           <div class="tips">如开启,用户成为分红用户后同时成为分销商,不受分销插件条件影响</div>
         </div>
       </el-form-item>
+      <el-form-item label="下级收益补贴条件" name="second">
+        <label>直推指定等级</label>
+        <el-select v-model="form.referee_grade_ids" multiple style="width: 160px; margin-left: 10px;">
+          <el-option
+            v-for="item in userGradeList"
+            :key="item.grade_id"
+            :label="item.name"
+            :value="item.grade_id">
+          </el-option>
+        </el-select>
+        <label>直推人数</label>
+        <el-input v-model="form.referee_grade_count" type="number"  style="width: 160px; margin-left: 10px;" ></el-input>
+        <span class="ml10">人</span>
+        <div class="tips">直推多少用户指定会员等级后,即可享受享受下级收益补贴</div>
+      </el-form-item>
       <!--提交-->
       <div class="common-button-wrapper">
         <el-button size="small" type="primary" @click="onSubmit" :loading="loading">提交</el-button>
@@ -87,6 +102,7 @@
 <script>
 import PlusApi from '@/api/plus/bonus.js';
 import Product from '@/components/product/Product';
+import UserApi from '@/api/user.js';
 
 export default {
   components: {
@@ -99,12 +115,15 @@
       form: {
         is_open: '',
         limit_buy: '',
-        become_agent: ''
+        become_agent: '',
+        referee_grade_ids: [],
+        referee_grade_count: ''
       },
       /*是否打开产品弹出层*/
       isproduct: false,
       /*是否正在加载*/
-      loading: false
+      loading: false,
+      userGradeList:[]
     };
   },
   props:{
@@ -116,8 +135,22 @@
     if (!this.form.product_image) {
       this.form.product_image = [];
     }
+    // 等级id转换成数组
+    for (let i = 0; i < this.form.referee_grade_ids.length; i++) {
+      this.form.referee_grade_ids[i] = parseInt(this.form.referee_grade_ids[i]);
+    }
+    this.getUserGradeList();
   },
   methods: {
+    /*获取用户管理模块的等级列表*/
+    getUserGradeList() {
+      let self = this;
+      UserApi.gradelist({}, true)
+        .then(res => {
+          self.userGradeList = res.data.list.data || res.data.list;
+        })
+        .catch(error => {});
+    },
 
     /*提交表单*/
     onSubmit() {
diff --git a/supplier_vue/src/views/plus/release/cash/Cash.vue b/supplier_vue/src/views/plus/release/cash/Cash.vue
new file mode 100644
index 0000000..5bcc049
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/cash/Cash.vue
@@ -0,0 +1,333 @@
+<template>
+  <!--
+      	作者:yj
+      -->
+  <div class="user">
+    <div class="common-seach-wrap">
+      <el-form size="small" :inline="true" :model="formInline" class="demo-form-inline">
+        <el-form-item label="审核状态">
+          <el-select v-model="formInline.apply_status" placeholder="请选择状态">
+            <el-option label="全部" value="-1"></el-option>
+            <el-option label="待审核" value="10"></el-option>
+            <el-option label="审核通过" value="20"></el-option>
+            <el-option label="已打款" value="40"></el-option>
+            <el-option label="驳回" value="30"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="提现方式">
+          <el-select v-model="formInline.pay_type" placeholder="请选择提现方式">
+            <el-option label="全部" value="-1"></el-option>
+            <el-option label="微信" value="10"></el-option>
+            <el-option label="支付宝" value="20"></el-option>
+            <el-option label="银行卡" value="30"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="用户id">
+          <el-input v-model="formInline.user_id" placeholder="请输入用户ID"></el-input>
+        </el-form-item>
+        <el-form-item label="">
+          <el-input v-model="formInline.search" placeholder="请输入昵称/姓名/手机号"></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="onSubmit">查询</el-button>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="small" type="success" @click="onExport" v-auth="'/plus/agent/cash/export'">导出</el-button>
+        </el-form-item> -->
+      </el-form>
+    </div>
+
+    <!--内容-->
+    <div class="product-content">
+      <div class="table-wrap">
+        <el-table :data="tableData" border style="width: 100%" v-loading="loading">
+          <el-table-column prop="user_id" label="用户ID" width="60"></el-table-column>
+          <el-table-column prop="nickName" label="微信头像" width="70">
+            <template slot-scope="scope">
+              <img class="radius" v-img-url="scope.row.avatarUrl" width="30" height="30" />
+            </template>
+          </el-table-column>
+          <el-table-column prop="nickName" label="微信昵称" width="100"></el-table-column>
+          <el-table-column prop="real_name" label="姓名"></el-table-column>
+          <el-table-column prop="mobile" label="手机号">
+            <template slot-scope="scope">
+              <p class="text-ellipsis" :title="scope.row.mobile">{{ scope.row.mobile }}</p>
+            </template>
+          </el-table-column>
+          <el-table-column prop="money" label="提现金额">
+            <template slot-scope="scope">
+              <span class="orange">{{ scope.row.money }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="fee_money" label="手续费">
+            <template slot-scope="scope">
+              <span class="black">{{ scope.row.fee_money || 0 }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="real_money" label="实际到账">
+            <template slot-scope="scope">
+              <span class="green">{{ scope.row.real_money || scope.row.money }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="pay_type.text" label="提现方式"></el-table-column>
+          <el-table-column prop="pay_type" label="提现信息	">
+            <template slot-scope="scope">
+              <div v-if="scope.row.pay_type.value == 20">
+                <p>
+                  <span>{{ scope.row.alipay_name }}</span>
+                </p>
+                <p>
+                  <span>{{ scope.row.alipay_account }}</span>
+                </p>
+              </div>
+              <div v-else-if="scope.row.pay_type.value == 30">
+                <p>
+                  <span>{{ scope.row.bank_name }}</span>
+                </p>
+                <p>
+                  <span>{{ scope.row.bank_account }}</span>
+                </p>
+                <p>
+                  <span>{{ scope.row.bank_card }}</span>
+                </p>
+              </div>
+              <div v-else>
+                <p><span>--</span></p>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column prop="apply_status.text" label="审核状态"></el-table-column>
+          <el-table-column prop="create_time" label="申请时间" width="135"></el-table-column>
+          <el-table-column prop="audit_time" label="审核时间" width="135"></el-table-column>
+          <el-table-column fixed="right" label="操作" width="180">
+            <template slot-scope="scope">
+              <div v-if="scope.row.apply_status.value == 10 || scope.row.apply_status.value == 20">
+                <el-button @click="editClick(scope.row)" type="text" size="small" v-auth="'/plus/release/cash/submit'">审核</el-button>
+                <template v-if="scope.row.apply_status.value == 20">
+                  <el-button @click="makeMoney(scope.row)" type="text" size="small" v-auth="'/plus/release/cash/money'">确认打款</el-button>
+                </template>
+                <template v-if="scope.row.apply_status.value == 20 && scope.row.pay_type.value == 10">
+                  <el-button @click="WxPay(scope.row.id)" type="text" size="small" v-auth="'/plus/release/cash/money'">微信付款</el-button>
+                </template>
+              </div>
+              <div v-if="scope.row.apply_status.value == 30">
+                <el-button @click="editClick(scope.row)" type="text" size="small">查看详情</el-button>
+               </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <!--分页-->
+      <div class="pagination">
+        <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" background
+          :current-page="curPage" :page-size="pageSize" layout="total, prev, pager, next, jumper"
+          :total="totalDataNumber"></el-pagination>
+      </div>
+    </div>
+    <Edit v-if="open_edit" :open_edit="open_edit" :form="userModel" @closeDialog="closeDialogFunc($event, 'edit')">
+    </Edit>
+  </div>
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+  import Edit from './dialog/Edit.vue';
+  import qs from 'qs';
+  export default {
+    components: {
+      /*编辑组件*/
+      Edit
+    },
+    data() {
+      return {
+        /*是否加载完成*/
+        loading: true,
+        /*列表数据*/
+        tableData: [],
+        /*一页多少条*/
+        pageSize: 20,
+        /*一共多少条数据*/
+        totalDataNumber: 0,
+        /*当前是第几页*/
+        curPage: 1,
+        formInline: {
+          apply_status: '-1',
+          pay_type: '-1',
+          search: '',
+          /*用户ID*/
+          user_id: ''
+        },
+        /*是否打开编辑弹窗*/
+        open_edit: false,
+        /*当前编辑的对象*/
+        userModel: {}
+      };
+    },
+    props: {},
+    watch: {
+
+    $route(to, from) {
+      if (to.query.user_id != null) {
+        this.formInline.user_id = to.query.user_id;
+      }else{
+        this.formInline.user_id ='';
+      }
+      this.curPage = 1;
+      this.getData();
+    }
+
+  },
+  created() {
+    if (this.$route.query.user_id != null) {
+      this.formInline.user_id = this.$route.query.user_id;
+    }
+    /*获取列表*/
+    this.getData();
+  },
+  methods: {
+
+    /*获取数据*/
+    getData() {
+      let self = this;
+      let Params = self.formInline;
+      Params.page = self.curPage;
+      Params.list_rows = self.pageSize;
+      PlusApi.cash(Params, true)
+        .then(data => {
+          self.loading = false;
+          self.tableData = data.data.list.data;
+          self.totalDataNumber = data.data.list.total;
+        })
+        .catch(error => {});
+    },
+
+    /*搜索*/
+    onSubmit() {
+      let self = this;
+      self.loading = true;
+      let Params = self.formInline;
+      PlusApi.cash(Params, true)
+        .then(data => {
+          self.loading = false;
+          self.tableData = data.data.list.data;
+          self.totalDataNumber = data.data.list.total;
+        })
+        .catch(error => {
+          self.loading = false;
+        });
+    },
+      onExport: function() {
+        let baseUrl = window.location.protocol + '//' + window.location.host;
+        window.location.href = baseUrl + '/index.php/shop/plus.release.cash/export?' + qs.stringify(this.formInline);
+      },
+    /*每页多少条*/
+    handleSizeChange(val) {
+      this.curPage = 1;
+      this.pageSize = val;
+      this.getData();
+    },
+
+    /*选择第几页*/
+    handleCurrentChange(val) {
+      let self = this;
+      self.curPage = val;
+      self.getData();
+    },
+
+    /*打开弹出层编辑*/
+    editClick(item) {
+      this.userModel = item;
+      this.open_edit = true;
+    },
+
+    /*关闭弹窗*/
+    closeDialogFunc(e, f) {
+      if (f == 'add') {
+        this.open_add = e.openDialog;
+        if (e.type == 'success') {
+          this.getData();
+        }
+      }
+      if (f == 'edit') {
+        this.open_edit = e.openDialog;
+        if (e.type == 'success') {
+          this.getData();
+        }
+      }
+    },
+
+    /*确认打款*/
+    makeMoney(e) {
+      let self = this;
+      self
+        .$confirm('确认要打款吗?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        })
+        .then(() => {
+          self.loading = true;
+            PlusApi.money({
+              id: e.id
+            },
+            true
+          )
+            .then(data => {
+              self.loading = false;
+              if (data.code == 1) {
+                self.$message({
+                  message: '恭喜你,操作成功',
+                  type: 'success'
+                });
+                this.getData();
+              } else {
+                self.loading = false;
+              }
+            })
+            .catch(error => {
+              self.loading = false;
+            });
+        })
+        .catch(() => {});
+    },
+
+    /*微信打款*/
+    WxPay(e) {
+      let self = this;
+      self
+        .$confirm('该操作 将使用分账功能,确定打款吗?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        })
+        .then(() => {
+          self.loading = true;
+            PlusApi.FbPay({
+              id: e
+            },
+            true
+          )
+            .then(data => {
+              self.loading = false;
+              if (data.code == 1) {
+                self.$message({
+                  message: '恭喜你,操作成功',
+                  type: 'success'
+                });
+                this.getData();
+              } else {
+                self.loading = false;
+              }
+            })
+            .catch(error => {
+              self.loading = false;
+            });
+        })
+        .catch(() => {});
+    }
+  }
+};
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/cash/dialog/Edit.vue b/supplier_vue/src/views/plus/release/cash/dialog/Edit.vue
new file mode 100644
index 0000000..c2a84cb
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/cash/dialog/Edit.vue
@@ -0,0 +1,94 @@
+<template>
+  <!--
+      	作者:luoyiming
+      	时间:2020-06-01
+      	描述:插件中心-分销-提现申请-弹窗
+      -->
+  <div v-if="status != 30">
+    <el-dialog title="提现审核" :visible.sync="dialogVisible" @close="dialogFormVisible" :close-on-click-modal="false" :close-on-press-escape="false">
+      <el-form :model="form">
+        <el-form-item label="审核状态" :label-width="formLabelWidth">
+          <div>
+            <el-radio v-model="form.apply_status" label="20">审核通过</el-radio>
+            <el-radio v-model="form.apply_status" label="30">驳回</el-radio>
+          </div>
+        </el-form-item>
+        <div v-if="form.apply_status == 30">
+          <el-form-item label="驳回原因" :label-width="formLabelWidth"><el-input v-model="form.reject_reason" autocomplete="off"></el-input></el-form-item>
+        </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible">取 消</el-button>
+        <el-button type="primary" @click="editApplyStatus">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+
+  <div v-else>
+    <el-dialog title="驳回原因" :visible.sync="dialogVisible" @close="dialogFormVisible" :close-on-click-modal="false" :close-on-press-escape="false">
+      <p>{{ reject_reason }}</p>
+      <!-- <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible">取 消</el-button>
+        <el-button type="primary" @click="dialogFormVisible">确 定</el-button>
+      </div> -->
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import PlusApi from '@/api/plus/release.js';
+export default {
+  data() {
+    return {
+      status: '',
+      reject_reason: '',
+      /*左边长度*/
+      formLabelWidth: '120px',
+      /*是否显示*/
+      dialogVisible: false
+    };
+  },
+  props: ['open_edit', 'form'],
+  created() {
+    this.dialogVisible = this.open_edit;
+    this.status = this.form.apply_status.value;
+    if (this.status == 30) {
+      this.reject_reason = this.form.reject_reason;
+    }
+  },
+  methods: {
+
+    /*修改*/
+    editApplyStatus() {
+      let self = this;
+      let params = this.form;
+      PlusApi.cashSubmit(params, true)
+        .then(data => {
+          self.$message({
+            message: '恭喜你,修改成功',
+            type: 'success'
+          });
+          self.dialogFormVisible(true);
+        })
+        .catch(error => {});
+    },
+
+    /*关闭弹窗*/
+    dialogFormVisible(e) {
+      if (e) {
+        this.$emit('closeDialog', {
+          type: 'success',
+          openDialog: false
+        });
+      } else {
+        this.$emit('closeDialog', {
+          type: 'error',
+          openDialog: false
+        });
+      }
+    }
+  }
+};
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/demand/apply/Apply.vue b/supplier_vue/src/views/plus/release/demand/apply/Apply.vue
new file mode 100644
index 0000000..721c5d7
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/demand/apply/Apply.vue
@@ -0,0 +1,169 @@
+<template>
+  <!--
+      	作者:yj
+      	时间:2025-11-9
+      	描述:申请
+      -->
+  <div class="user">
+    <div class="common-seach-wrap">
+      <el-form size="small" :inline="true" :model="formInline" class="demo-form-inline">
+        <el-form-item label=""><el-input v-model="formInline.nick_name" placeholder="请输入昵称/姓名/手机号"></el-input></el-form-item>
+        <el-form-item><el-button type="primary" @click="onSubmit">查询</el-button></el-form-item>
+      </el-form>
+    </div>
+
+    <!--内容-->
+    <div class="product-content">
+      <div class="table-wrap">
+        <el-table :data="tableData" size="small" border style="width: 100%" v-loading="loading">
+          <el-table-column prop="user_id" label="用户ID" width="60"></el-table-column>
+          <el-table-column prop="nickName" label="微信头像" width="70">
+            <template slot-scope="scope">
+              <img class="radius" v-img-url="scope.row.avatarUrl" width="30" height="30" />
+            </template>
+          </el-table-column>
+          <el-table-column prop="nickName" label="	微信昵称" width="250"></el-table-column>
+          <el-table-column prop="real_name" label="姓名" width="100"></el-table-column>
+          <el-table-column prop="mobile" label="手机号">
+            <template slot-scope="scope">
+              <p class="text-ellipsis">{{ scope.row.mobile }}</p>
+            </template>
+          </el-table-column>
+          <!-- <el-table-column prop="detail" label="地址"></el-table-column> -->
+          <el-table-column prop="apply_status" label="审核状态" width="100">
+            <template slot-scope="scope">
+              <span :class="{
+                red: scope.row.apply_status.value == 10,
+                green: scope.row.apply_status.value == 20,
+                gray: scope.row.apply_status.value == 30 }">
+                {{ scope.row.apply_status.text }}
+              </span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="apply_time" label="申请时间" width="135"></el-table-column>
+          <el-table-column fixed="right" label="操作" width="50">
+            <template slot-scope="scope">
+              <div>
+                <el-button v-if="scope.row.apply_status.value == 10" @click="editClick(scope.row)" type="text" size="small">
+                  审核
+                </el-button>
+                <el-button v-if="scope.row.apply_status.value == 30" @click="editClick(scope.row)" type="text" size="small">查看</el-button>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <!--分页-->
+      <div class="pagination">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          background
+          :current-page="curPage"
+          :page-size="pageSize"
+          layout="total, prev, pager, next, jumper"
+          :total="totalDataNumber"
+        ></el-pagination>
+      </div>
+    </div>
+    <Edit v-if="open_edit" :open_edit="open_edit" :form="userModel" @closeDialog="closeDialogFunc($event, 'edit')"></Edit>
+  </div>
+</template>
+
+<script>
+import PlusApi from '@/api/plus/release.js';
+import Edit from './dialog/Edit.vue';
+export default {
+  components: {
+    /*编辑组件*/
+    Edit
+  },
+  data() {
+    return {
+      /*是否加载完成*/
+      loading: true,
+      /*列表数据*/
+      tableData: [],
+      /*一页多少条*/
+      pageSize: 20,
+      /*一共多少条数据*/
+      totalDataNumber: 0,
+      /*当前是第几页*/
+      curPage: 1,
+      formInline: {
+        nick_name: ''
+      },
+      /*是否打开编辑弹窗*/
+      open_edit: false,
+      /*当前编辑的对象*/
+      userModel: {}
+    };
+  },
+  created() {
+    /*获取列表*/
+    this.getData();
+  },
+  methods: {
+    /*选择第几页*/
+    handleCurrentChange(val) {
+      let self = this;
+      self.curPage = val;
+      self.loading = true;
+      self.getData();
+    },
+
+    /*获取数据*/
+    getData() {
+      let self = this;
+      let Params = {};
+      Params.page = self.curPage;
+      Params.list_rows = self.pageSize;
+      Params.nick_name = this.formInline.nick_name;
+      PlusApi.demandApplyList(Params, true)
+        .then(data => {
+          self.loading = false;
+          self.tableData = data.data.apply_list.data;
+          self.totalDataNumber = data.data.apply_list.total;
+        })
+        .catch(error => {});
+    },
+
+    //搜索
+    onSubmit() {
+      this.curPage = 1;
+      this.getData();
+    },
+
+    /*每页多少条*/
+    handleSizeChange(val) {
+      this.curPage = 1;
+      this.getData();
+    },
+
+    /*打开弹出层编辑*/
+    editClick(item) {
+      this.userModel = item;
+      this.open_edit = true;
+    },
+
+    /*关闭弹窗*/
+    closeDialogFunc(e, f) {
+      if (f == 'add') {
+        this.open_add = e.openDialog;
+        if (e.type == 'success') {
+          this.getData();
+        }
+      }
+      if (f == 'edit') {
+        this.open_edit = e.openDialog;
+        if (e.type == 'success') {
+          this.getData();
+        }
+      }
+    }
+  }
+};
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/demand/apply/dialog/Edit.vue b/supplier_vue/src/views/plus/release/demand/apply/dialog/Edit.vue
new file mode 100644
index 0000000..6fce7f5
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/demand/apply/dialog/Edit.vue
@@ -0,0 +1,88 @@
+<template>
+  <!--
+      	作者:yj
+      	时间:2025-11-9
+      -->
+  <div v-if="status != 30">
+    <el-dialog title="申请审核" :visible.sync="dialogVisible" @close="dialogFormVisible" :close-on-click-modal="false" :close-on-press-escape="false">
+      <el-form :model="form">
+        <el-form-item label="审核状态" :label-width="formLabelWidth">
+          <div>
+            <el-radio v-model="form.apply_status" label="20">审核通过</el-radio>
+            <el-radio v-model="form.apply_status" label="30">驳回</el-radio>
+          </div>
+        </el-form-item>
+        <div v-if="form.apply_status == 30">
+          <el-form-item label="驳回原因" :label-width="formLabelWidth"><el-input v-model="form.reject_reason" autocomplete="off"></el-input></el-form-item>
+        </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible">取 消</el-button>
+        <el-button type="primary" @click="editApplyStatus">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+
+  <div v-else>
+    <el-dialog title="驳回原因" :visible.sync="dialogVisible" @close="dialogFormVisible" :close-on-click-modal="false" :close-on-press-escape="false">
+      <p>{{ reject_reason }}</p>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import PlusApi from '@/api/plus/release.js';
+export default {
+  data() {
+    return {
+      status: '',
+      reject_reason: '',
+      /*左边长度*/
+      formLabelWidth: '120px',
+      /*是否显示*/
+      dialogVisible: false
+    };
+  },
+  props: ['open_edit', 'form'],
+  created() {
+    this.dialogVisible = this.open_edit;
+    this.status = this.form.apply_status.value;
+    if (this.status == 30) {
+      this.reject_reason = this.form.reject_reason;
+    }
+  },
+  methods: {
+    /*修改用户*/
+    editApplyStatus() {
+      let self = this;
+      let params = this.form;
+      PlusApi.editDemandApplyStatus(params, true)
+        .then(data => {
+          self.$message({
+            message: '恭喜你,修改成功',
+            type: 'success'
+          });
+          self.dialogFormVisible(true);
+        })
+        .catch(error => {});
+    },
+
+    /*关闭弹窗*/
+    dialogFormVisible(e) {
+      if (e) {
+        this.$emit('closeDialog', {
+          type: 'success',
+          openDialog: false
+        });
+      } else {
+        this.$emit('closeDialog', {
+          type: 'error',
+          openDialog: false
+        });
+      }
+    }
+  }
+};
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/demand/user/User.vue b/supplier_vue/src/views/plus/release/demand/user/User.vue
new file mode 100644
index 0000000..991bad3
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/demand/user/User.vue
@@ -0,0 +1,214 @@
+<template>
+  <!--
+      	作者:yj
+      	时间:2025-11-9
+      -->
+  <div class="user">
+    <div class="common-seach-wrap">
+      <el-form size="small" :inline="true" :model="formInline" class="demo-form-inline">
+        <el-form-item label=""><el-input v-model="formInline.nick_name" placeholder="请输入昵称/姓名/手机号"></el-input></el-form-item>
+        <el-form-item><el-button type="primary" @click="onSubmit">查询</el-button></el-form-item>
+      </el-form>
+    </div>
+
+    <!--内容-->
+    <div class="product-content">
+      <div class="table-wrap">
+        <el-table size="small" :data="tableData" border style="width: 100%" v-loading="loading">
+          <el-table-column prop="user_id" label="用户ID" width="70"></el-table-column>
+          <el-table-column prop="nickName" label="微信头像" width="70">
+            <template slot-scope="scope">
+              <img class="radius" v-img-url="scope.row.avatarUrl" width="30" height="30" />
+            </template>
+          </el-table-column>
+          <el-table-column prop="nickName" label="微信昵称" width="250"></el-table-column>
+          <el-table-column prop="real_name" label="姓名" width="100"></el-table-column>
+          <el-table-column prop="mobile" label="手机号"></el-table-column>
+         <!-- <el-table-column prop="detail" label="地址"></el-table-column> -->
+         <el-table-column prop="" label="会员等级">
+           <template slot-scope="scope">
+             <span v-if="scope.row.grade_id == 0">无等级</span>
+             <span v-else>{{ scope.row.grade.name }}</span>
+           </template>
+         </el-table-column>
+          <el-table-column prop="create_time" label="成为时间" width="140"></el-table-column>
+          <el-table-column fixed="right" label="操作" width="160">
+            <template slot-scope="scope">
+              <div>
+                <!-- <el-button @click="saleClick(scope.row)" type="text" size="small">需求订单</el-button> -->
+                <el-button @click="EditClick(scope.row)" type="text" size="small">修改</el-button>
+                <el-button @click="delClick(scope.row)" type="text" size="small">删除</el-button>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <!--分页-->
+      <div class="pagination">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          background
+          :current-page="curPage"
+          :page-size="pageSize"
+          layout="total, prev, pager, next, jumper"
+          :total="totalDataNumber"
+        ></el-pagination>
+      </div>
+    </div>
+
+    <!--编辑-->
+    <Edit :open_edit="open_edit" :userModel="userModel"  :gradeList="gradeList" @close="closeEditFunc"></Edit>
+
+  </div>
+</template>
+
+<script>
+import { deepClone } from '@/utils/base.js'
+import PlusApi from '@/api/plus/release.js';
+import Edit from './dialog/Edit.vue';
+export default {
+  components: {
+    Edit,
+  },
+  data() {
+    return {
+      /*是否加载完成*/
+      loading: true,
+      /*列表数据*/
+      tableData: [],
+      /*一页多少条*/
+      pageSize: 20,
+      /*一共多少条数据*/
+      totalDataNumber: 0,
+      /*当前是第几页*/
+      curPage: 1,
+      /*搜索对象*/
+      formInline: {
+        nick_name: ''
+      },
+      /*是否打开弹窗*/
+      open_dialog: false,
+      /*选中的用户*/
+      userModel:{},
+      /*是否打开修改*/
+      open_edit:false,
+      /*等级*/
+      gradeList: [],
+    };
+  },
+  created() {
+    /*获取列表*/
+    this.getData();
+  },
+  methods: {
+    /*选择第几页*/
+    handleCurrentChange(val) {
+      let self = this;
+      self.curPage = val;
+      self.loading = true;
+      self.getData();
+    },
+
+    /*获取数据*/
+    getData() {
+      let self = this;
+      let Params = {};
+      Params.page = self.curPage;
+      Params.list_rows = self.pageSize;
+      if(self.formInline.nick_name!=''){
+        Params.nick_name=self.formInline.nick_name;
+      }
+      PlusApi.demandUserList(Params, true)
+        .then(data => {
+          self.loading = false;
+          self.tableData = data.data.list.data;
+          self.totalDataNumber = data.data.list.total;
+          self.gradeList = data.data.grade;
+        })
+        .catch(error => {
+          self.loading = false;
+        });
+    },
+
+    //搜索
+    onSubmit() {
+      this.curPage = 1;
+      this.getData();
+    },
+
+    /*每页多少条*/
+    handleSizeChange(val) {
+      this.curPage = 1;
+      this.pageSize = val;
+      this.getData();
+    },
+
+    /*订单*/
+    saleClick(item) {
+      this.$router.push({
+        path:'/plus/release/index',
+        query:{
+          type:'demandorder',
+          repair_user_id:item.user_id
+        }
+      })
+    },
+
+
+    /*删除*/
+    delClick(row) {
+      let self = this;
+      self
+        .$confirm('此操作将永久删除该记录, 是否继续?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        })
+        .then(() => {
+          self.loading = true;
+          PlusApi.deleteDemandUser(
+            {
+              user_id: row.user_id
+            },
+            true
+          )
+            .then(data => {
+              self.loading = false;
+              self.$message({
+                message: data.msg,
+                type: 'success'
+              });
+              self.getData();
+            })
+            .catch(error => {
+              self.loading = false;
+            });
+        })
+        .catch(() => {
+          self.loading = false;
+        });
+    },
+
+     /*打开编辑用户弹窗*/
+    EditClick(e){
+      this.userModel=deepClone(e);
+      this.open_edit=true;
+    },
+
+    /*关闭编辑用户弹窗*/
+    closeEditFunc(e){
+      this.open_edit=false;
+      if(e.type=='success'){
+        this.getData();
+      }
+    }
+
+  }
+};
+</script>
+
+<style scoped="scoped">
+  .el-button{margin-left: 0; margin-right: 10px;}
+</style>
diff --git a/supplier_vue/src/views/plus/release/demand/user/dialog/Edit.vue b/supplier_vue/src/views/plus/release/demand/user/dialog/Edit.vue
new file mode 100644
index 0000000..7ec11cd
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/demand/user/dialog/Edit.vue
@@ -0,0 +1,93 @@
+<template>
+  <!--
+      	作者:yj
+      -->
+  <el-dialog title="编辑" :visible.sync="dialogVisible" @close="cancelFunc" :close-on-click-modal="false" :close-on-press-escape="false" width="60%">
+    <el-form :model="formData">
+      <el-form-item label="微信昵称" :label-width="formLabelWidth">
+        <el-input type="text" v-model="formData.nickName" autocomplete="off" :disabled="true"></el-input>
+      </el-form-item>
+      <el-form-item label="微信头像" :label-width="formLabelWidth">
+        <img v-img-url="formData.avatarUrl" width="50" height="50" />
+      </el-form-item>
+      <el-form-item label="姓名" :label-width="formLabelWidth">
+        <el-input type="text" v-model="formData.real_name" autocomplete="off"></el-input>
+      </el-form-item>
+      <el-form-item label="手机号" :label-width="formLabelWidth">
+        <el-input type="text" v-model="formData.mobile" autocomplete="off"></el-input>
+      </el-form-item>
+      <el-form-item label="等级" :label-width="formLabelWidth">
+        <el-select v-model="formData.grade_id" placeholder="-请选择等级-">
+          <el-option v-for="(item,index) in gradeList" :key="index" :label="item.name" :value="item.grade_id"></el-option>
+        </el-select>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="cancelFunc">取 消</el-button>
+      <el-button type="primary" @click="confirmFunc">确 定</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import PlusApi from '@/api/plus/release.js';
+import UserApi from '@/api/user.js';
+export default {
+  data() {
+    return {
+      /*左边长度*/
+      formLabelWidth: '100px',
+      /*是否显示*/
+      dialogVisible: false,
+      /*表单数据模型*/
+      formData: {},
+    };
+  },
+  props: ['open_edit','userModel','gradeList'],
+  watch: {
+    open_edit: function(n, o) {
+      if (n != o) {
+        this.dialogVisible = this.open_edit;
+        if (n) {
+          this.formData = this.userModel;
+        }
+      }
+    }
+  },
+  created() {
+
+  },
+  methods: {
+    /*修改用户*/
+    confirmFunc() {
+      let self = this;
+      let params ={};
+      params.user_id= this.formData.user_id;
+      params.real_name=this.formData.real_name;
+      params.mobile=this.formData.mobile;
+      params.grade_id=this.formData.grade_id;
+      PlusApi.demandUserEdit(params, true)
+        .then(data => {
+          self.$message({
+            message: '恭喜你,修改成功',
+            type: 'success'
+          });
+          self.cancelFunc(true);
+        })
+        .catch(error => {});
+    },
+    /*关闭弹窗*/
+    cancelFunc(e) {
+      let type='cancel';
+      if(e){
+        type='success';
+      }
+      this.$emit('close', {
+        type:type
+      });
+    }
+  }
+};
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/demandproject/Edit.vue b/supplier_vue/src/views/plus/release/demandproject/Edit.vue
new file mode 100644
index 0000000..6cd3634
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/demandproject/Edit.vue
@@ -0,0 +1,78 @@
+<template>
+  <!--
+      作者:yj
+  -->
+  <el-dialog title="详情" :visible.sync="dialogVisible" @close='dialogFormVisible' :close-on-click-modal="false"
+    :close-on-press-escape="false" width="600px">
+    <el-form size="small" :model="form" ref="form">
+      <el-form-item label="标题:" :label-width="formLabelWidth">
+        {{form.name}}
+      </el-form-item>
+      <el-form-item label="分类:" :label-width="formLabelWidth">
+        {{form.category.name}}
+      </el-form-item>
+      <el-form-item label="预算:" :label-width="formLabelWidth">
+        ¥{{form.price}}
+      </el-form-item>
+      <el-form-item label="详细需求:" :label-width="formLabelWidth" >
+        {{form.content}}
+      </el-form-item>
+      <el-form-item label="图片:" :label-width="formLabelWidth">
+         <div v-if="form.image_list" v-for="(item,index) in form.image_list">
+          <a target="_blank" :href="item.file_path"><img style="max-width: 50px; height: 50px;" v-img-url="item.file_path" />
+          </a>
+        </div>
+      </el-form-item>
+      <el-form-item label="期望完成时间:" :label-width="formLabelWidth" >
+        {{form.finish_time}}
+      </el-form-item>
+      <el-form-item label="期望地点:" :label-width="formLabelWidth">
+        {{form.detail}}
+      </el-form-item>
+      <el-form-item label="联系方式:" :label-width="formLabelWidth">
+        <span v-if="form.show_phone == 0">不公开</span>
+        <span v-if="form.show_phone == 1">公开</span>
+      </el-form-item>
+
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="dialogFormVisible">返回</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  export default {
+    data() {
+      return {
+        /*左边长度*/
+        formLabelWidth: '120px',
+        /*是否显示*/
+        dialogVisible: false,
+      };
+    },
+    props: ['open_edit', 'form'],
+    created() {
+      this.dialogVisible = this.open_edit;
+    },
+    methods: {
+      /*关闭弹窗*/
+      dialogFormVisible(e) {
+        if (e) {
+          this.$emit('closeDialog', {
+            type: 'success',
+            openDialog: false
+          })
+        } else {
+          this.$emit('closeDialog', {
+            type: 'error',
+            openDialog: false
+          })
+        }
+      }
+
+    }
+  };
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/demandproject/dialog/Edit.vue b/supplier_vue/src/views/plus/release/demandproject/dialog/Edit.vue
new file mode 100644
index 0000000..39dda8c
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/demandproject/dialog/Edit.vue
@@ -0,0 +1,92 @@
+<template>
+  <!--
+      	作者:yj
+      -->
+  <div v-if="status != 2">
+    <el-dialog title="审核" :visible.sync="dialogVisible" @close="dialogFormVisible" :close-on-click-modal="false" :close-on-press-escape="false">
+      <el-form :model="form">
+        <el-form-item label="审核状态" :label-width="formLabelWidth">
+          <div>
+            <el-radio v-model="form.status" label="1">审核通过</el-radio>
+            <el-radio v-model="form.status" label="2">驳回</el-radio>
+          </div>
+        </el-form-item>
+        <div v-if="form.status == 2">
+          <el-form-item label="驳回原因" :label-width="formLabelWidth"><el-input v-model="form.reject_reason" autocomplete="off"></el-input></el-form-item>
+        </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible">取 消</el-button>
+        <el-button type="primary" @click="editApplyStatus">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+
+  <div v-else>
+    <el-dialog title="驳回原因" :visible.sync="dialogVisible" @close="dialogFormVisible" :close-on-click-modal="false" :close-on-press-escape="false">
+      <p>{{ reject_reason }}</p>
+      <!-- <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible">取 消</el-button>
+        <el-button type="primary" @click="dialogFormVisible">确 定</el-button>
+      </div> -->
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import PlusApi from '@/api/plus/release.js';
+export default {
+  data() {
+    return {
+      status: '',
+      reject_reason: '',
+      /*左边长度*/
+      formLabelWidth: '120px',
+      /*是否显示*/
+      dialogVisible: false
+    };
+  },
+  props: ['open_edit', 'form'],
+  created() {
+    this.dialogVisible = this.open_edit;
+    this.status = this.form.status.value;
+    if (this.status == 30) {
+      this.reject_reason = this.form.reject_reason;
+    }
+  },
+  methods: {
+
+    /*修改*/
+    editApplyStatus() {
+      let self = this;
+      let params = this.form;
+      PlusApi.demandProjectSubmit(params, true)
+        .then(data => {
+          self.$message({
+            message: '恭喜你,修改成功',
+            type: 'success'
+          });
+          self.dialogFormVisible(true);
+        })
+        .catch(error => {});
+    },
+
+    /*关闭弹窗*/
+    dialogFormVisible(e) {
+      if (e) {
+        this.$emit('closeDialog', {
+          type: 'success',
+          openDialog: false
+        });
+      } else {
+        this.$emit('closeDialog', {
+          type: 'error',
+          openDialog: false
+        });
+      }
+    }
+  }
+};
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/demandproject/index.vue b/supplier_vue/src/views/plus/release/demandproject/index.vue
new file mode 100644
index 0000000..e2b6559
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/demandproject/index.vue
@@ -0,0 +1,232 @@
+<template>
+  <!--
+          作者:yj
+      -->
+  <div class="user">
+    <!--搜索表单-->
+    <div class="common-seach-wrap">
+      <el-form size="small" :inline="true" :model="searchForm" class="demo-form-inline">
+        <!-- <el-form-item label="类目">
+          <el-select size="small" v-model="searchForm.category_id" placeholder="所有分类">
+            <el-option label="全部" value="0"></el-option>
+            <el-option v-for="(item, index) in categoryList" :key="index" :label="item.name" :value="item.category_id">
+            </el-option>
+          </el-select>
+        </el-form-item> -->
+        <el-form-item label="标题">
+          <el-input size="small" v-model="searchForm.name" placeholder="请输入标题"></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="small" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
+    <!--内容-->
+    <div class="product-content">
+      <div class="table-wrap">
+        <el-table size="small" :data="tableData" border style="width: 100%" v-loading="loading">
+          <el-table-column prop="project_id" label="ID" width="100"></el-table-column>
+          <el-table-column prop="nickName" label="发布用户"></el-table-column>
+          <el-table-column prop="nickName" label="微信头像">
+            <template slot-scope="scope">
+              <img :src="scope.row.user.avatarUrl" width="30px" height="30px" />
+            </template>
+          </el-table-column>
+          <el-table-column prop="name" label="标题"></el-table-column>
+          <el-table-column prop="category.name" label="分类" width="200"></el-table-column>
+          <el-table-column prop="price" label="预算" width="200"></el-table-column>
+          <el-table-column prop="status" label="状态"  width="200">
+            <template slot-scope="scope">
+              <span v-if="scope.row.status == 0">未审核</span>
+              <span v-if="scope.row.status == 1" class="green">已通过</span>
+              <span v-if="scope.row.status == 2" class="green">已驳回</span>
+            </template>
+          </el-table-column>
+          <el-table-column fixed="right" label="操作" width="200">
+            <template slot-scope="scope">
+              <el-button v-if="scope.row.status == 0" @click="shClick(scope.row)" type="text" size="small">审核</el-button>
+              <el-button @click="editClick(scope.row)" type="text" size="small" >详情</el-button>
+              <el-button @click="evaluateClick(scope.row)" type="text" size="small" >评论列表</el-button>
+              <el-button @click="deleteClick(scope.row)" type="text" size="small">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <!--分页-->
+      <div class="pagination">
+        <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" background
+          :current-page="curPage" :page-size="pageSize" layout="total, prev, pager, next, jumper"
+          :total="totalDataNumber"></el-pagination>
+      </div>
+
+    </div>
+    <!--编辑-->
+    <Edit v-if="open_edit" :open_edit="open_edit" :form="userModel" @closeDialog="closeDialogFunc($event, 'edit')"></Edit>
+
+    <Editsh v-if="open_sh" :open_edit="open_sh" :form="userModel" @closeDialog="closeDialogFunc($event, 'editsh')"></Editsh>
+  </div>
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+  import Edit from './Edit.vue';
+  import Editsh from './dialog/Edit.vue';
+  import {deepClone} from '@/utils/base.js';
+  export default {
+    components: {
+      /*编辑组件*/
+      Edit,
+      Editsh,
+    },
+    data() {
+      return {
+        /*是否加载完成*/
+        loading: true,
+        /*一页多少条*/
+        pageSize: 10,
+        /*一共多少条数据*/
+        totalDataNumber: 0,
+        /*当前是第几页*/
+        curPage: 1,
+        /*列表数据*/
+        tableData: [],
+        /*横向表单数据模型*/
+        /*搜索参数*/
+        searchForm: {
+          name: '',
+          category_id: ''
+        },
+        /*是否打开编辑弹窗*/
+        open_edit: false,
+        /*当前编辑的对象*/
+        userModel: {},
+        open_sh:false,
+      };
+    },
+    created() {
+      /*获取列表*/
+      this.getTableList();
+
+    },
+    methods: {
+      /*选择第几页*/
+      handleCurrentChange(val) {
+        let self = this;
+        self.loading = true;
+        self.curPage = val;
+        self.getTableList();
+      },
+
+      /*每页多少条*/
+      handleSizeChange(val) {
+        this.pageSize = val;
+        this.getTableList();
+      },
+
+
+      /*获取列表*/
+      getTableList() {
+        let self = this;
+        let Params = self.searchForm;
+        Params.page = self.curPage;
+        Params.list_rows = self.pageSize;
+        PlusApi.demandProject(Params, true)
+          .then(data => {
+            self.loading = false;
+            self.tableData = data.data.list.data;
+            self.totalDataNumber = data.data.list.total;
+          })
+          .catch(error => {
+
+          });
+      },
+      /*搜索查询*/
+      onSubmit() {
+        this.curPage = 1;
+        this.getTableList();
+      },
+
+      evaluateClick(item) {
+        let self = this;
+        let params = item.project_id;
+        this.$router.push({
+          path: '/plus/release/evaluate/list',
+          query: {
+            project_id: params
+          }
+        });
+      },
+
+      /*打开编辑*/
+      editClick(item) {
+        this.userModel = deepClone(item);
+        this.open_edit = true;
+      },
+
+      /*打开弹出层审核*/
+      shClick(item) {
+        this.userModel = item;
+        this.open_sh = true;
+      },
+
+      /*关闭弹窗*/
+      closeDialogFunc(e, f) {
+        if (f == 'add') {
+          this.open_add = e.openDialog;
+          if (e.type == 'success') {
+            this.getTableList();
+          }
+        }
+        if (f == 'edit') {
+          this.open_edit = e.openDialog;
+          if (e.type == 'success') {
+            this.getTableList();
+          }
+        }
+        if (f == 'editsh') {
+          this.open_sh = e.openDialog;
+          if (e.type == 'success') {
+            this.getTableList();
+          }
+        }
+      },
+
+      /*删除*/
+      deleteClick(row) {
+        let self = this;
+        self.$confirm('此操作将永久删除该记录, 是否继续?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          self.loading = true;
+          PlusApi.demandDel({
+              project_id: row.project_id
+            }, true)
+            .then(data => {
+              self.loading = false;
+              if (data.code == 1) {
+                self.$message({
+                  message: data.msg,
+                  type: 'success'
+                });
+                self.getTableList();
+              } else {
+                self.$message.error('错了哦,这是一条错误消息');
+              }
+            })
+            .catch(error => {
+              self.loading = false;
+            });
+
+        }).catch(() => {
+
+        });
+      }
+
+    }
+  };
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/evaluate/list.vue b/supplier_vue/src/views/plus/release/evaluate/list.vue
new file mode 100644
index 0000000..740a441
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/evaluate/list.vue
@@ -0,0 +1,174 @@
+<template>
+  <!--
+          作者:yj
+      -->
+  <div class="user">
+    <!--搜索表单-->
+    <div class="common-seach-wrap">
+      <el-form size="small" :inline="true" :model="searchForm" class="demo-form-inline">
+        <!-- <el-form-item label="类目">
+          <el-select size="small" v-model="searchForm.category_id" placeholder="所有分类">
+            <el-option label="全部" value="0"></el-option>
+            <el-option v-for="(item, index) in categoryList" :key="index" :label="item.name" :value="item.category_id">
+            </el-option>
+          </el-select>
+        </el-form-item> -->
+        <el-form-item label="用户id">
+          <el-input size="small" v-model="searchForm.user_id" placeholder="请输入用户id"></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="small" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button>
+          <el-button size="small" type="info" @click="cancelFunc">返回上一页</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
+    <!--内容-->
+    <div class="product-content">
+      <div class="table-wrap">
+        <el-table size="small" :data="tableData" border style="width: 100%" v-loading="loading">
+          <el-table-column prop="id" label="ID" width="100"></el-table-column>
+          <el-table-column prop="user.nickName" label="评论用户" width="200"></el-table-column>
+          <el-table-column prop="nickName" label="微信头像" width="100">
+            <template slot-scope="scope">
+              <img :src="scope.row.user.avatarUrl" width="30px" height="30px" />
+            </template>
+          </el-table-column>
+          <el-table-column prop="score_txt" label="评分" width="100"></el-table-column>
+          <el-table-column prop="status" label="图片" width="200">
+            <template slot-scope="scope">
+              <a style="margin-right:5px;" v-for="(item, index) in scope.row.image_list" target="_blank" :href="item.file_path"><img :src="item.file_path" width="30px" height="30px" /></a>
+            </template>
+          </el-table-column>
+          <el-table-column prop="evaluate_content" label="评语"></el-table-column>
+          <el-table-column fixed="right" label="操作" width="200">
+            <template slot-scope="scope">
+              <el-button @click="deleteClick(scope.row)" type="text" size="small">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <!--分页-->
+      <div class="pagination">
+        <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" background
+          :current-page="curPage" :page-size="pageSize" layout="total, prev, pager, next, jumper"
+          :total="totalDataNumber"></el-pagination>
+      </div>
+
+    </div>
+
+  </div>
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+  import {deepClone} from '@/utils/base.js';
+  export default {
+    components: {
+    },
+    data() {
+      return {
+        /*是否加载完成*/
+        loading: true,
+        /*一页多少条*/
+        pageSize: 10,
+        /*一共多少条数据*/
+        totalDataNumber: 0,
+        /*当前是第几页*/
+        curPage: 1,
+        /*列表数据*/
+        tableData: [],
+        /*横向表单数据模型*/
+        /*搜索参数*/
+        searchForm: {
+          user_id: '',
+          category_id: ''
+        },
+        project_id:''
+      };
+    },
+    created() {
+      /*获取列表*/
+      this.getTableList();
+
+    },
+    methods: {
+      /*选择第几页*/
+      handleCurrentChange(val) {
+        let self = this;
+        self.loading = true;
+        self.curPage = val;
+        self.getTableList();
+      },
+
+      /*每页多少条*/
+      handleSizeChange(val) {
+        this.pageSize = val;
+        this.getTableList();
+      },
+
+
+      /*获取列表*/
+      getTableList() {
+        let self = this;
+        let Params = self.searchForm;
+        Params.page = self.curPage;
+        Params.list_rows = self.pageSize;
+        Params.project_id = self.$route.query.project_id;;
+        PlusApi.evaluate(Params, true)
+          .then(data => {
+            self.loading = false;
+            self.tableData = data.data.list.data;
+            self.totalDataNumber = data.data.list.total;
+          })
+          .catch(error => {
+
+          });
+      },
+      /*搜索查询*/
+      onSubmit() {
+        this.curPage = 1;
+        this.getTableList();
+      },
+
+      cancelFunc() {
+        this.$router.back(-1);
+      },
+      /*删除*/
+      deleteClick(row) {
+        let self = this;
+        self.$confirm('此操作将永久删除该记录, 是否继续?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          self.loading = true;
+          PlusApi.evaluateDel({
+              id: row.id
+            }, true)
+            .then(data => {
+              self.loading = false;
+              if (data.code == 1) {
+                self.$message({
+                  message: data.msg,
+                  type: 'success'
+                });
+                self.getTableList();
+              } else {
+                self.$message.error('错了哦,这是一条错误消息');
+              }
+            })
+            .catch(error => {
+              self.loading = false;
+            });
+
+        }).catch(() => {
+
+        });
+      }
+
+    }
+  };
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/grade/index.vue b/supplier_vue/src/views/plus/release/grade/index.vue
new file mode 100644
index 0000000..6ba8213
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/grade/index.vue
@@ -0,0 +1,32 @@
+<template>
+  <!--
+      作者 yj
+  -->
+  <div class="common-seach-wrap">
+    <el-tabs v-model="activeName">
+      <el-tab-pane label="等级列表" name="list"></el-tab-pane>
+    </el-tabs>
+
+    <!--设置-->
+    <List v-if="activeName == 'list'"></List>
+
+  </div>
+</template>
+<script>
+import List from './part/list';
+export default {
+  components: {
+    List,
+  },
+  data() {
+    return {
+      activeName: 'list'
+    };
+  },
+  methods: {}
+};
+</script>
+
+<style>
+
+</style>
diff --git a/supplier_vue/src/views/plus/release/grade/part/Add.vue b/supplier_vue/src/views/plus/release/grade/part/Add.vue
new file mode 100644
index 0000000..637ba6c
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/grade/part/Add.vue
@@ -0,0 +1,136 @@
+<template>
+  <!--
+      作者 yj
+  -->
+  <el-dialog title="添加等级" :visible.sync="dialogVisible" @close='dialogFormVisible' :close-on-click-modal="false"
+    :close-on-press-escape="false" width="600px">
+    <el-form size="small" :model="form" ref="form">
+      <el-form-item label="等级名称" :label-width="formLabelWidth" prop="name" :rules="[{required: true,message: '请输入等级名称'}]">
+        <el-input v-model="form.name" placeholder="请输入等级名称"></el-input>
+      </el-form-item>
+      <el-form-item label="等级图标" :label-width="formLabelWidth" prop="img" :rules="[{required: true,message: ' '}]">
+        <el-row>
+          <el-button icon="el-icon-picture-outline" @click="openUpload('img')">选择图片</el-button>
+          <div v-if="form.img!=''" class="img">
+            <img :src="form.img" width="100" height="100" />
+          </div>
+        </el-row>
+      </el-form-item>
+      <el-form-item label="等级权重" :label-width="formLabelWidth" prop="weight" :rules="[{required: true,message: '请输入等级权重'}]">
+        <el-input v-model="form.weight" type="number" placeholder="请输入等级权重"></el-input>
+        <div class="gray9">权重越大,等级越高</div>
+      </el-form-item>
+      <el-form-item label="升级条件" :label-width="formLabelWidth">
+        <div class="gray9">0或不填均无法升级到该等级</div>
+        <div class="d-s-c mt16">
+          <span>累计好评达</span>
+          <el-input v-model="form.upgrade_num" type="number" style="width: 160px; margin-left: 10px;" ></el-input>
+          <span class="ml10">条</span>
+        </div>
+      </el-form-item>
+    </el-form>
+
+    <!--上传图片组件-->
+    <Upload v-if="isupload" :isupload="isupload" :type="type" @returnImgs="returnImgsFunc">上传图片</Upload>
+
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="dialogFormVisible">取 消</el-button>
+      <el-button type="primary" @click="addGrade()" :disabled="submit_loading">确 定</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+  import Upload from '@/components/file/Upload';
+  export default {
+    components: {
+      /*上传组件*/
+      Upload,
+    },
+    data() {
+      return {
+        form: {
+          /*昵称*/
+          name: '',
+          /*累计满*/
+          upgrade_num:0,
+          /*等级权重*/
+          weight: 100,
+          img:'',
+        },
+        /*左边长度*/
+        formLabelWidth: '120px',
+        /*是否显示*/
+        dialogVisible: false,
+        /*是否正在提交*/
+        submit_loading: false,
+        /*是否上传图片*/
+        isupload: false,
+      };
+    },
+    props: ['open_add'],
+    created() {
+      this.dialogVisible = this.open_add;
+    },
+    methods: {
+
+      /*添加等级*/
+      addGrade() {
+        let self = this;
+        let params = this.form;
+        self.$refs.form.validate((valid) => {
+          if (valid) {
+            self.submit_loading = true;
+            PlusApi.addgrade(params, true).then(data => {
+                self.submit_loading = false;
+                self.$message({
+                  message: data.msg,
+                  type: 'success'
+                });
+                self.dialogFormVisible(true);
+              })
+              .catch(error => {
+                self.submit_loading = false;
+              });
+          }
+        });
+      },
+      /*上传*/
+      openUpload(e) {
+        this.type = e;
+        this.isupload = true;
+      },
+      /*获取图片*/
+      returnImgsFunc(e) {
+        if (e != null && e.length > 0) {
+          if (this.type == 'img') {
+            this.form.img = e[0].file_path;
+          }
+        }
+        this.isupload = false;
+      },
+      /*取消*/
+      cancelFunc() {
+        this.$router.back(-1);
+      },
+      /*关闭弹窗*/
+      dialogFormVisible(e) {
+        if (e) {
+          this.$emit('closeDialog', {
+            type: 'success',
+            openDialog: false
+          })
+        } else {
+          this.$emit('closeDialog', {
+            type: 'error',
+            openDialog: false
+          })
+        }
+      }
+
+    }
+  };
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/grade/part/Edit.vue b/supplier_vue/src/views/plus/release/grade/part/Edit.vue
new file mode 100644
index 0000000..3dc7179
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/grade/part/Edit.vue
@@ -0,0 +1,131 @@
+<template>
+  <!--
+      作者 yj
+  -->
+  <el-dialog title="编辑等级" :visible.sync="dialogVisible" @close='dialogFormVisible' :close-on-click-modal="false"
+    :close-on-press-escape="false" width="600px">
+    <el-form size="small" :model="form" ref="form">
+      <el-form-item label="等级名称" :label-width="formLabelWidth" prop="name" :rules="[{required: true,message: ' '}]">
+        <el-input v-model="form.name" autocomplete="off"></el-input>
+      </el-form-item>
+      <el-form-item label="等级图标" :label-width="formLabelWidth" prop="img" :rules="[{required: true,message: ' '}]">
+        <el-row>
+          <el-button icon="el-icon-picture-outline" @click="openUpload('img')">选择图片</el-button>
+          <div v-if="form.img!='' && form.img!=null" class="img">
+            <img :src="form.img" width="100" height="100" />
+          </div>
+        </el-row>
+      </el-form-item>
+      <el-form-item label="等级权重" :label-width="formLabelWidth" prop="weight" :rules="[{required: true,message: '请输入等级权重'}]">
+        <el-input v-model="form.weight" type="number" placeholder="请输入等级权重"></el-input>
+        <div class="gray9">权重越大,等级越高</div>
+      </el-form-item>
+      <el-form-item label="升级条件" :label-width="formLabelWidth">
+        <div class="gray9">0或不填均无法升级到该等级</div>
+        <div class="d-s-c mt16">
+          <span>累计好评达</span>
+          <el-input v-model="form.upgrade_num" type="number" style="width: 160px; margin-left: 10px;" ></el-input>
+          <span class="ml10">条</span>
+        </div>
+      </el-form-item>
+    </el-form>
+
+    <!--上传图片组件-->
+    <Upload v-if="isupload" :isupload="isupload" :type="type" @returnImgs="returnImgsFunc">上传图片</Upload>
+
+
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="dialogFormVisible">取 消</el-button>
+      <el-button type="primary" @click="editGrade" :disabled="submit_loading">确 定</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+  import Upload from '@/components/file/Upload';
+  export default {
+    components: {
+      /*上传组件*/
+      Upload,
+    },
+    data() {
+      return {
+        /*左边长度*/
+        formLabelWidth: '120px',
+        /*是否显示*/
+        dialogVisible: false,
+        /*是否正在提交*/
+        submit_loading: false,
+        /*是否上传图片*/
+        isupload: false,
+      };
+    },
+    props: ['open_edit', 'form'],
+    created() {
+      this.dialogVisible = this.open_edit;
+    },
+    methods: {
+      /*修改用户*/
+      editGrade() {
+        let self = this;
+        let params = this.form;
+        self.$refs.form.validate((valid) => {
+          if (valid) {
+            self.submit_loading = true;
+            PlusApi.editGrade(params, true)
+              .then(data => {
+                self.submit_loading = false;
+                self.$message({
+                  message: '恭喜你,等级修改成功',
+                  type: 'success'
+                });
+                self.dialogFormVisible(true);
+
+              })
+              .catch(error => {
+                self.submit_loading = false;
+              });
+
+          }
+        });
+      },
+      /*上传*/
+      openUpload(e) {
+        this.type = e;
+        this.isupload = true;
+      },
+      /*获取图片*/
+      returnImgsFunc(e) {
+        if (e != null && e.length > 0) {
+          if (this.type == 'img') {
+            this.form.img = e[0].file_path;
+          }
+        }
+        this.isupload = false;
+      },
+      /*取消*/
+      cancelFunc() {
+        this.$router.back(-1);
+      },
+
+      /*关闭弹窗*/
+      dialogFormVisible(e) {
+        if (e) {
+          this.$emit('closeDialog', {
+            type: 'success',
+            openDialog: false
+          })
+        } else {
+          this.$emit('closeDialog', {
+            type: 'error',
+            openDialog: false
+          })
+        }
+      }
+
+    }
+  };
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/grade/part/list.vue b/supplier_vue/src/views/plus/release/grade/part/list.vue
new file mode 100644
index 0000000..83b4880
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/grade/part/list.vue
@@ -0,0 +1,189 @@
+<template>
+  <!--
+          作者 yj
+      -->
+  <div class="user">
+    <!--添加等级-->
+    <div class="common-level-rail">
+      <el-button size="small" type="primary" @click="addClick" icon="el-icon-plus" v-auth="'/plus/release/grade/add'">添加等级</el-button>
+    </div>
+
+    <!--内容-->
+    <div class="product-content">
+      <div class="table-wrap">
+        <el-table size="small" :data="tableData" border style="width: 100%" v-loading="loading">
+          <el-table-column prop="name" label="等级名称" width="300"></el-table-column>
+          <el-table-column prop="weight" label="权重"></el-table-column>
+          <el-table-column prop="upgrade_num" label="好评数量"></el-table-column>
+          <el-table-column fixed="right" label="操作" width="90">
+            <template slot-scope="scope">
+              <el-button @click="editClick(scope.row)" type="text" size="small" v-auth="'/plus/release/grade/edit'" >编辑</el-button>
+              <el-button @click="deleteClick(scope.row)" type="text" size="small"  v-auth="'/plus/release/grade/delete'">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <!--分页-->
+      <div class="pagination">
+        <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" background :current-page="curPage"
+          :page-size="pageSize" layout="total, prev, pager, next, jumper"
+          :total="totalDataNumber">
+        </el-pagination>
+      </div>
+    </div>
+
+    <!--添加-->
+    <Add v-if="open_add" :open_add="open_add" @closeDialog="closeDialogFunc($event, 'add')"></Add>
+
+    <!--编辑-->
+    <Edit v-if="open_edit" :open_edit="open_edit" :form="userModel" @closeDialog="closeDialogFunc($event, 'edit')"></Edit>
+  </div>
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+  import Edit from './Edit.vue';
+  import Add from './Add.vue';
+  import {deepClone} from '@/utils/base.js';
+  export default {
+    components: {
+      /*编辑组件*/
+      Edit,
+      Add
+    },
+    data() {
+      return {
+        /*是否加载完成*/
+        loading: true,
+        /*列表数据*/
+        tableData: [],
+        /*一页多少条*/
+        pageSize: 15,
+        /*一共多少条数据*/
+        totalDataNumber: 0,
+        /*当前是第几页*/
+        curPage: 1,
+        /*横向表单数据模型*/
+        formInline: {
+          user: '',
+        },
+        /*是否打开添加弹窗*/
+        open_add: false,
+        /*是否打开编辑弹窗*/
+        open_edit: false,
+        /*当前编辑的对象*/
+        userModel: {}
+      };
+    },
+    created() {
+
+      /*获取列表*/
+      this.getTableList();
+
+    },
+    methods: {
+
+      /*换行*/
+      keepTextStyle(val){
+        let str=val.replace(/(\\r\\n)/g,'<br/>');
+        return str;
+      },
+
+      /*选择第几页*/
+      handleCurrentChange(val) {
+        let self = this;
+        self.curPage = val;
+        self.loading = true;
+        self.getTableList();
+      },
+
+      /*每页多少条*/
+      handleSizeChange(val) {
+        this.curPage = 1;
+        this.pageSize = val;
+        this.getTableList();
+      },
+
+      /*获取列表*/
+      getTableList() {
+        let self = this;
+        let Params = {};
+        Params.page = self.curPage;
+        Params.list_rows = self.pageSize;
+        PlusApi.gradelist(Params, true)
+          .then(data => {
+            self.loading = false;
+            self.tableData = data.data.list.data;
+            self.totalDataNumber = data.data.list.total
+          })
+          .catch(error => {
+
+          });
+      },
+
+      /*打开添加*/
+      addClick() {
+        this.open_add = true;
+      },
+
+      /*打开编辑*/
+      editClick(item) {
+        this.userModel = deepClone(item);
+        this.open_edit = true;
+      },
+
+      /*关闭弹窗*/
+      closeDialogFunc(e, f) {
+        if (f == 'add') {
+          this.open_add = e.openDialog;
+          if (e.type == 'success') {
+            this.getTableList();
+          }
+        }
+        if (f == 'edit') {
+          this.open_edit = e.openDialog;
+          if (e.type == 'success') {
+            this.getTableList();
+          }
+        }
+      },
+
+      /*删除用户*/
+      deleteClick(row) {
+        let self = this;
+        self.$confirm('此操作将永久删除该记录, 是否继续?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          self.loading = true;
+          PlusApi.deletegrade({
+              grade_id: row.grade_id
+            }, true)
+            .then(data => {
+              self.loading = false;
+              if (data.code == 1) {
+                self.$message({
+                  message: data.msg,
+                  type: 'success'
+                });
+                self.getTableList();
+              } else {
+                self.$message.error('错了哦,这是一条错误消息');
+              }
+            })
+            .catch(error => {
+              self.loading = false;
+            });
+
+        }).catch(() => {
+
+        });
+      }
+
+    }
+  };
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/index.vue b/supplier_vue/src/views/plus/release/index.vue
new file mode 100644
index 0000000..6acbbd4
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/index.vue
@@ -0,0 +1,192 @@
+<template>
+  <!--
+      	作者:yj
+      -->
+  <div>
+    <DemandApply v-if="activeName == 'demandapply'"></DemandApply>
+    <DemandUser v-if="activeName == 'demanduser'"></DemandUser>
+    <SupplyApply v-if="activeName == 'supplyapply'"></SupplyApply>
+    <SupplyUser v-if="activeName == 'supplyuser'"></SupplyUser>
+    <DemandProject v-if="activeName == 'demandproject'"></DemandProject>
+    <SupplyProject v-if="activeName == 'supplyproject'"></SupplyProject>
+    <Order v-if="activeName == 'order'"></Order>
+    <Category v-if="activeName == 'category'"></Category>
+    <Tag v-if="activeName == 'tag'"></Tag>
+    <Cash v-if="activeName == 'cash'"></Cash>
+    <Setting v-if="activeName == 'setting'"></Setting>
+    <Grade v-if="activeName == 'grade'"></Grade>
+  </div>
+</template>
+<script>
+import bus from '@/utils/eventBus.js';
+import DemandApply from './demand/apply/Apply';
+import DemandUser from './demand/user/User';
+import SupplyApply from './supply/apply/Apply';
+import SupplyUser from './supply/user/User';
+import DemandProject from './demandproject/index';
+import SupplyProject from './supplyproject/index';
+import Order from './order/Order';
+import Category from './releasecategory/index';
+import Tag from './tag/index';
+import Cash from './cash/Cash';
+import Setting from './setting/Setting';
+import Grade from './grade/index';
+
+
+export default {
+  components: {
+    DemandApply,
+    DemandUser,
+    SupplyApply,
+    SupplyUser,
+    DemandProject,
+    SupplyProject,
+    Order,
+    Category,
+    Tag,
+    Cash,
+    Setting,
+    Grade,
+  },
+  data() {
+    return {
+      formInline: {
+        nick_name: ''
+      },
+      /*参数*/
+      param: {},
+      /*当前选中*/
+      activeName: 'demandapply',
+      /*切换数组*/
+      sourceList: [
+        {
+          key: 'demandapply',
+          value: '需求方申请',
+          path:'/plus/release/demand/apply/index'
+        },
+        {
+          key: 'demanduser',
+          value: '需求方用户',
+          path:'/plus/release/demand/user/index'
+        },{
+          key: 'supplyapply',
+          value: '供应方申请',
+          path:'/plus/release/supply/apply/index'
+        },
+        {
+          key: 'supplyuser',
+          value: '供应方用户',
+          path:'/plus/release/supply/user/index'
+        },
+        {
+          key: 'demandproject',
+          value: '需求发布',
+          path:'/plus/release/demandproject/index'
+        },
+        {
+          key: 'supplyproject',
+          value: '供应发布',
+          path:'/plus/release/supplyproject/index'
+        },
+        // {
+        //   key: 'order',
+        //   value: '用户订单',
+        //   path:'/plus/release/order/Order'
+        // },
+        {
+          key: 'grade',
+          value: '信誉等级',
+          path:'/plus/release/grade/index'
+        },
+        {
+          key: 'category',
+          value: '分类列表',
+          path:'/plus/release/releasecategory/index'
+        },
+        {
+          key: 'tag',
+          value: '标签列表',
+          path:'/plus/release/tag/index'
+        },
+        // {
+        //   key: 'cash',
+        //   value: '提现列表',
+        //   path:'/plus/release/cash/Cash'
+        // },
+        {
+          key: 'setting',
+          value: '发布设置',
+          path:'/plus/release/setting/Setting'
+        }
+
+      ],
+      /*权限筛选后的数据*/
+      tabList:[],
+      /*判断third是否有参数*/
+      is_third_param: false
+    };
+  },
+  watch:{
+
+    //监听路由
+    $route(to, from) {
+      this.init();
+    }
+  },
+  created() {
+
+    this.init();
+
+  },
+  beforeDestroy() {
+    //发送类别切换
+    bus.$emit('tabData', { active: null, tab_type:'release',list: [] });
+    bus.$off('activeValue');
+  },
+  methods: {
+
+    /*初始化方法*/
+    init(){
+      this.tabList=this.authFilter();
+
+      if(this.tabList.length>0){
+        this.activeName=this.tabList[0].key;
+      }
+
+      if (this.$route.query.type != null) {
+        this.activeName = this.$route.query.type;
+      }
+
+      /*监听传插件的值*/
+      bus.$on('activeValue', res => {
+        if (this.is_third_param) {
+          this.param.user_id = '';
+          this.is_third_param = false;
+        }
+        this.activeName = res;
+      });
+
+      //发送类别切换
+      let params = {
+        active: this.activeName,
+        list: this.tabList,
+        tab_type:'release'
+      };
+      bus.$emit('tabData', params);
+    },
+
+    /*权限过滤*/
+    authFilter(){
+      let list=[];
+      for(let i=0;i<this.sourceList.length;i++){
+        let item=this.sourceList[i];
+        if(this.$filter.isAuth(item.path)){
+          list.push(item);
+        }
+      }
+      return list;
+    }
+
+  }
+};
+</script>
diff --git a/supplier_vue/src/views/plus/release/order/Order.vue b/supplier_vue/src/views/plus/release/order/Order.vue
new file mode 100644
index 0000000..2de5058
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/order/Order.vue
@@ -0,0 +1,281 @@
+<template>
+  <!--
+      	作者:yj
+      -->
+  <div class="user">
+    <div class="common-seach-wrap">
+      <el-form size="small" :inline="true" :model="formInline" class="demo-form-inline">
+        <el-form-item label="创建时间">
+          <div class="block">
+            <span class="demonstration"></span>
+            <el-date-picker size="small" v-model="formInline.create_time" type="daterange" value-format="yyyy-MM-dd"
+              range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+          </div>
+        </el-form-item>
+        <el-form-item label="支付方式">
+          <el-select v-model="formInline.pay_type" placeholder="选择支付方式">
+            <el-option label="全部" value="0"></el-option>
+            <el-option label="余额支付" value="10"></el-option>
+            <el-option label="微信支付" value="20"></el-option>
+            <el-option label="线下支付" value="40"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="支付状态">
+          <el-select v-model="formInline.pay_status" placeholder="选择支付状态">
+            <el-option label="全部" value="-1"></el-option>
+            <el-option label="已支付" value="20"></el-option>
+            <el-option label="未支付" value="10"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="订单状态">
+          <el-select v-model="formInline.order_status" placeholder="选择订单状态">
+            <el-option label="全部" value="-1"></el-option>
+            <el-option label="进行中" value="10"></el-option>
+            <el-option label="已完成" value="30"></el-option>
+            <el-option label="已取消" value="20"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="需求用户id"><el-input v-model="formInline.demand_user_id" placeholder="请输入需求用户ID"></el-input></el-form-item>
+        <el-form-item label="供应用户id"><el-input v-model="formInline.supply_user_id" placeholder="请输入供应用户ID"></el-input></el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="onSubmit">查询</el-button>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="small" type="success" @click="onExport">导出</el-button>
+        </el-form-item> -->
+      </el-form>
+    </div>
+
+    <!--内容-->
+    <div class="product-content">
+      <div class="table-wrap">
+        <!-- <el-tabs v-model="activeName" @tab-click="handleClick">
+          <el-tab-pane label="全部订单" name="status0"></el-tab-pane>
+          <el-tab-pane :label="'待确认支付'" name="status1">
+            <span slot="label">待确认支付 <el-tag size="mini">{{order_count.status1}}</el-tag></span>
+          </el-tab-pane>
+          <el-tab-pane label="服务中" name="status6">
+            <span slot="label">服务中 <el-tag size="mini">{{order_count.status6}}</el-tag></span>
+          </el-tab-pane>
+          <el-tab-pane label="待评价" name="status8">
+             <span slot="label">待评价 <el-tag size="mini">{{order_count.status8}}</el-tag></span>
+          </el-tab-pane>
+          <el-tab-pane label="已完成" name="status9">
+             <span slot="label">已完成 <el-tag size="mini">{{order_count.status9}}</el-tag></span>
+          </el-tab-pane>
+          <el-tab-pane label="已取消" name="status10">
+             <span slot="label">已取消 <el-tag size="mini">{{order_count.status10}}</el-tag></span>
+          </el-tab-pane>
+        </el-tabs> -->
+        <el-table :data="tableData" size="small" border style="width: 100%" v-loading="loading">
+          <el-table-column prop="nickName" label="供应会员" width="200">
+            <template slot-scope="scope">
+              <img class="radius" v-img-url="scope.row.supplyuser.avatarUrl" width="30" height="30" />
+              <div>ID:{{scope.row.supplyuser.user_id}}</div>
+              <div>{{scope.row.supplyuser.nickName}}</div>
+            </template>
+          </el-table-column>
+          <el-table-column prop="nickName" label="需求会员" width="200">
+            <template slot-scope="scope">
+              <img class="radius" v-img-url="scope.row.demanduser.avatarUrl" width="30" height="30" />
+              <div>ID:{{scope.row.demanduser.user_id}}</div>
+              <div>{{scope.row.demanduser.nickName}}</div>
+            </template>
+          </el-table-column>
+          <el-table-column prop="project_name" label="标题"></el-table-column>
+          <el-table-column prop="pay_price" label="支付金额" width="100"></el-table-column>
+          <el-table-column prop="money" label="项目佣金" width="80"></el-table-column>
+          <el-table-column prop="pay_type.text" label="支付方式" width="80">
+            <template slot-scope="scope">
+              <span class="gray9" v-if="scope.row.pay_status == 20">已支付<br />{{ scope.row.pay_type.text }}</span>
+              <span v-else>未支付</span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="create_time" label="下单时间" width="140">
+            <template slot-scope="scope">
+              <div>{{ scope.row.create_time }}</div>
+            </template>
+          </el-table-column>
+          <!-- <el-table-column prop="evaluate_content" label="需求方评价">
+            <template slot-scope="scope" v-if="scope.row.is_settled == 2">
+              <div v-if="scope.row.server_score > 0">{{scope.row.server_score}}星</div>
+              <div>
+                <span v-if="scope.row.score == 10">好评</span>
+                <span v-else-if="scope.row.score == 20">中评</span>
+                <span v-else-if="scope.row.score == 30">差评</span>
+                <span v-else>好评</span>
+              </div>
+              <div>{{ scope.row.evaluate_content }}</div>
+            </template>
+          </el-table-column> -->
+          <el-table-column prop="is_settled" label="订单状态" width="120">
+            <template slot-scope="scope">
+              <div class="red" v-if="scope.row.order_status == 20">{{scope.row.state_text}}</div>
+              <div class="green" v-else>{{scope.row.state_text}}</div>
+            </template>
+          </el-table-column>
+
+          <el-table-column fixed="right" label="操作" width="100">
+            <template slot-scope="scope">
+              <div>
+                <el-button v-if="scope.row.order_status ==10 && scope.row.pay_status == 20" @click="editClick(scope.row)" type="text" size="small" v-auth="'/plus/release/order/edit'">查看详情</el-button>
+                <el-button v-if="scope.row.order_status ==10 && scope.row.pay_status == 10" @click="editClick(scope.row)" type="text" size="small"
+                     >确认支付</el-button>
+                <!-- <el-button v-if="scope.row.order_status ==21 && scope.row.pay_status == 20" @click="editClick(scope.row)" type="text" size="small"
+                     >审核取消订单</el-button> -->
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <!--分页-->
+      <div class="pagination">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          background
+          :current-page="curPage"
+          :page-size="pageSize"
+          layout="total, prev, pager, next, jumper"
+          :total="totalDataNumber"
+        ></el-pagination>
+      </div>
+    </div>
+
+    <!--编辑-->
+    <Edit :open_edit="open_edit" :userModel="userModel" @close="closeEditFunc"></Edit>
+
+  </div>
+</template>
+
+<script>
+import PlusApi from '@/api/plus/release.js';
+import Edit from './dialog/Edit.vue';
+import qs from 'qs';
+export default {
+  components: {
+    /*编辑组件*/
+    Edit,
+  },
+  data() {
+    return {
+      /*是否加载完成*/
+      loading: true,
+      /*列表数据*/
+      tableData: [],
+      /*一页多少条*/
+      pageSize: 20,
+      /*一共多少条数据*/
+      totalDataNumber: 0,
+      /*当前是第几页*/
+      curPage: 1,
+      formInline: {
+        /*ID*/
+        demand_user_id: 0,
+        supply_user_id: 0,
+        pay_type:'0',
+        pay_status:'-1',
+        order_status:'-1',
+        create_time: '',
+      },
+      /*是否打开编辑弹窗*/
+      open_edit: false,
+      /*当前编辑的对象*/
+      userModel: {},
+    };
+  },
+  props: {},
+  watch: {
+    $route(to, from) {
+      if (to.query.supply_user_id != null) {
+        this.formInline.supply_user_id = to.query.supply_user_id;
+      }
+      this.curPage = 1;
+      this.getData();
+    }
+  },
+  created() {
+    if (this.$route.query.supply_user_id != null) {
+      this.formInline.supply_user_id = this.$route.query.supply_user_id;
+    }
+    /*获取列表*/
+    this.getData();
+  },
+  methods: {
+    /*选择第几页*/
+    handleCurrentChange(val) {
+      let self = this;
+      self.curPage = val;
+      self.loading = true;
+      self.getData();
+    },
+
+    /*获取数据*/
+    getData() {
+      let self = this;
+      let Params = {
+        demand_user_id: self.formInline.demand_user_id,
+        supply_user_id: self.formInline.supply_user_id,
+        pay_status:self.formInline.pay_status,
+        pay_type:self.formInline.pay_type,
+        order_status:self.formInline.order_status,
+        create_time:self.formInline.create_time,
+        page: self.curPage,
+        list_rows: self.pageSize,
+      };
+
+      PlusApi.releaseOrder(Params, true)
+        .then(data => {
+          self.loading = false;
+          self.tableData = data.data.list.data;
+          self.totalDataNumber = data.data.list.total;
+        })
+        .catch(error => {
+          self.loading = false;
+        });
+    },
+
+    //搜索
+    onSubmit() {
+      let self = this;
+      self.loading = true;
+      self.curPage = 1;
+      self.getData();
+    },
+
+    /*每页多少条*/
+    handleSizeChange(val) {
+      this.curPage = 1;
+      this.pageSize = val;
+      this.getData();
+    },
+
+    onExport: function() {
+      let baseUrl = window.location.protocol + '//' + window.location.host;
+      this.formInline.dataType = self.dataType;
+      window.location.href = baseUrl + '/index.php/shop/plus.release.Order/export?' + qs.stringify(this.formInline);
+    },
+
+    /*打开弹出层编辑*/
+    editClick(item) {
+      this.userModel = item;
+      this.open_edit = true;
+    },
+
+    /*关闭弹窗*/
+    closeEditFunc(e){
+      this.open_edit=false;
+      if(e.type=='success'){
+        this.getData();
+      }
+    }
+  }
+};
+</script>
+
+<style scoped="">
+  .referee-name {
+    width: 33.333333%;
+  }
+</style>
diff --git a/supplier_vue/src/views/plus/release/order/dialog/Edit.vue b/supplier_vue/src/views/plus/release/order/dialog/Edit.vue
new file mode 100644
index 0000000..14ce6e9
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/order/dialog/Edit.vue
@@ -0,0 +1,182 @@
+<template>
+  <!--
+      	作者:yj
+      -->
+  <el-dialog title="详情" :visible.sync="dialogVisible" @close="cancelFunc" :close-on-click-modal="false" :close-on-press-escape="false" width="60%">
+    <el-form class="repair-form" :model="formData">
+      <el-form-item label="供应用户:" :label-width="formLabelWidth">
+        <div class="d-s-c" style="margin-bottom: 10px;">
+           <span><img v-img-url="formData.supplyuser.avatarUrl" width="40" height="40" /></span>
+           <span>{{formData.supplyuser.nickName}}</span>
+        </div>
+      </el-form-item>
+      <el-form-item label="需求用户:" :label-width="formLabelWidth">
+        <div class="d-s-c">
+           <span><img v-img-url="formData.demanduser.avatarUrl" width="40" height="40" /></span>
+           <span>{{formData.demanduser.nickName}}</span>
+        </div>
+      </el-form-item>
+      <el-form-item label="标题:" :label-width="formLabelWidth">
+        <span class="mr10">{{formData.project_name}}</span> <span class="ml20">支付金额:¥{{formData.pay_price}}</span> <span class="ml20">佣金:¥{{formData.money}}</span>
+      </el-form-item>
+
+      <!-- <el-form-item label="图片" :label-width="formLabelWidth">
+        <div>
+          <div v-for="(item, index) in formData.image" :key="index"><a target="_blank" :href="item.file_path"><img style="max-width: 50px; height: 50px;" v-img-url="item.file_path" /></a></div>
+        </div>
+      </el-form-item>
+      <el-form-item label="备注" :label-width="formLabelWidth" prop="message">
+        <el-input v-model="formData.message" autocomplete="off"></el-input>
+      </el-form-item>-->
+
+      <el-form-item label="服务星级" :label-width="formLabelWidth" v-if="formData.server_score">
+        {{formData.server_score}}星
+      </el-form-item>
+      <el-form-item label="评分" :label-width="formLabelWidth" v-if="formData.score">
+        <div v-if="formData.score == 10">好评</div>
+        <div v-if="formData.score == 20">中评</div>
+        <div v-if="formData.score == 30">差评</div>
+      </el-form-item>
+      <el-form-item label="评语" :label-width="formLabelWidth" v-if="formData.evaluate_content">
+        {{formData.evaluate_content}}
+      </el-form-item>
+
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button type="warning" @click="onCancel(20)" v-if="formData.pay_status == 10 && formData.order_status == 10">取消订单</el-button>
+      <el-button @click="cancelFunc">返 回</el-button>
+      <el-button type="primary" @click="onCash" v-if="formData.order_status == 10 && formData.pay_status == 10">确定已付款</el-button>
+      <el-button type="primary" @click="onFinish" v-if="formData.order_status == 10 && formData.pay_status == 20">确定已完成</el-button>
+      <!-- <el-button type="warning" @click="onCancel(20)" v-if="formData.order_status == 21">确定取消订单</el-button>
+      <el-button type="danger" @click="onCancel(10)" v-if="formData.order_status == 21">撤销申请</el-button> -->
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import PlusApi from '@/api/plus/release.js';
+import UserApi from '@/api/user.js';
+export default {
+  data() {
+    return {
+      /*左边长度*/
+      formLabelWidth: '100px',
+      /*是否显示*/
+      dialogVisible: false,
+      /*表单数据模型*/
+      formData: {},
+    };
+  },
+  props: {
+    open_edit: Boolean,
+    userModel: Object,
+  },
+  watch: {
+    open_edit: function(n, o) {
+      if (n != o) {
+        this.dialogVisible = this.open_edit;
+        if (n) {
+          this.formData = this.userModel;
+        }
+      }
+    }
+  },
+  created() {
+    /*获取列表*/
+   // this.getData();
+  },
+  methods: {
+    /*获取数据*/
+    // getData() {
+    //   let self = this;
+    //   PlusApi.toOrderEdit()
+    //     .then(data => {
+    //       self.loading = false;
+    //       self.user = data.data.user;
+    //     })
+    //     .catch(error => {
+    //       self.loading = false;
+    //     });
+    // },
+
+    /*关闭弹窗*/
+    cancelFunc(e) {
+      let type='cancel';
+      if(e){
+        type='success';
+      }
+      this.$emit('close', {
+        type:type
+      });
+    },
+    /*线下支付*/
+    onCash(row) {
+      let self = this;
+      let id = this.formData.id;
+      self
+        .$confirm('确认后不可恢复,确认已收到款了吗?', '提示', {
+          type: 'warning'
+        })
+        .then(() => {
+          PlusApi.onCash({
+            id: id
+          }).then(data => {
+            self.$message({
+              message: '操作成功',
+              type: 'success'
+            });
+            self.cancelFunc(true);
+          });
+        });
+    },
+    onFinish(row) {
+      let self = this;
+      let id = this.formData.id;
+      self
+        .$confirm('确认后马上发放佣金,确认已完成了吗?', '提示', {
+          type: 'warning'
+        })
+        .then(() => {
+          PlusApi.onFinish({
+            id: id
+          }).then(data => {
+            self.$message({
+              message: '操作成功',
+              type: 'success'
+            });
+            self.cancelFunc(true);
+          });
+        });
+    },
+    onCancel(order_status) {
+      let self = this;
+      let id = this.formData.id;
+      self
+        .$confirm('此操作不可恢复,确定吗?', '提示', {
+          type: 'warning'
+        })
+        .then(() => {
+          PlusApi.onCancel({
+            id: id,
+            order_status: order_status
+          }).then(data => {
+            self.$message({
+              message: '操作成功',
+              type: 'success'
+            });
+            self.cancelFunc(true);
+          });
+        });
+    },
+  }
+};
+</script>
+
+<style scoped>
+  .repair-img image{
+    height: 100px;
+  }
+  .repair-form .el-form-item {
+     margin-bottom: 0px;
+  }
+</style>
diff --git a/supplier_vue/src/views/plus/release/releasecategory/Add.vue b/supplier_vue/src/views/plus/release/releasecategory/Add.vue
new file mode 100644
index 0000000..8ee6ca8
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/releasecategory/Add.vue
@@ -0,0 +1,103 @@
+<template>
+  <!--
+    	作者:wangxw
+    -->
+  <el-dialog title="添加分类" :visible.sync="dialogVisible" @close="dialogFormVisible" :close-on-click-modal="false"
+    :close-on-press-escape="false">
+    <el-form size="small" :model="form" :rules="formRules" ref="form">
+      <el-form-item label="分类名称" prop="name" :label-width="formLabelWidth">
+        <el-input v-model="form.name" autocomplete="off"></el-input>
+      </el-form-item>
+      <el-form-item label="分类排序" prop="sort" :label-width="formLabelWidth">
+        <el-input v-model.number="form.sort" autocomplete="off"></el-input>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="dialogFormVisible">取 消</el-button>
+      <el-button type="primary" @click="addUser" :loading="loading">确 定</el-button>
+    </div>
+  </el-dialog>
+
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+  export default {
+    components: {
+    },
+    data() {
+      return {
+        form: {
+          name: '',
+          sort: 100,
+        },
+        formRules: {
+          name: [{
+            required: true,
+            message: '请输入分类名称',
+            trigger: 'blur'
+          }],
+          sort: [{
+            required: true,
+            message: '分类排序不能为空'
+          }, {
+            type: 'number',
+            message: '分类排序必须为数字'
+          }]
+        },
+        /*左边长度*/
+        formLabelWidth: '120px',
+        /*是否显示*/
+        dialogVisible: false,
+        loading: false,
+      };
+    },
+    props: ['open_add', 'addform'],
+    created() {
+      this.dialogVisible = this.open_add;
+    },
+    methods: {
+      /*添加*/
+      addUser() {
+        let self = this;
+        let params = self.form;
+        self.$refs.form.validate((valid) => {
+          if (valid) {
+            self.loading = true;
+            PlusApi.catAdd(params).then(data => {
+              self.loading = false;
+              self.$message({
+                message: '添加成功',
+                type: 'success'
+              });
+              self.dialogFormVisible(true);
+            }).catch(error => {
+              self.loading = false;
+            });
+          }
+        });
+      },
+
+      /*关闭弹窗*/
+      dialogFormVisible(e) {
+        if (e) {
+          this.$emit('closeDialog', {
+            type: 'success',
+            openDialog: false
+          })
+        } else {
+          this.$emit('closeDialog', {
+            type: 'error',
+            openDialog: false
+          })
+        }
+      },
+    }
+  };
+</script>
+
+<style>
+ .img {
+    margin-top: 10px;
+  }
+</style>
diff --git a/supplier_vue/src/views/plus/release/releasecategory/Edit.vue b/supplier_vue/src/views/plus/release/releasecategory/Edit.vue
new file mode 100644
index 0000000..5ccf526
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/releasecategory/Edit.vue
@@ -0,0 +1,106 @@
+<template>
+  <!--
+    	作者:wangxw
+    -->
+  <el-dialog title="修改分类" :visible.sync="dialogVisible" @close="dialogFormVisible" :close-on-click-modal="false"
+    :close-on-press-escape="false">
+    <el-form size="small" :model="form" :rules="formRules" ref="form">
+      <el-form-item label="分类名称" prop="name" :label-width="formLabelWidth">
+        <el-input v-model="form.name" autocomplete="off"></el-input>
+      </el-form-item>
+      <el-form-item label="分类排序" prop="sort" :label-width="formLabelWidth">
+        <el-input v-model.number="form.sort" autocomplete="off"></el-input>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="dialogFormVisible">取 消</el-button>
+      <el-button type="primary" @click="addUser" :loading="loading">确 定</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+  export default {
+    components: {
+    },
+    data() {
+      return {
+        form: {
+          category_id: 0,
+          name: '',
+          sort: '',
+        },
+        formRules: {
+          name: [{
+            required: true,
+            message: '请输入分类名称',
+            trigger: 'blur'
+          }],
+          sort: [{
+            required: true,
+            message: '分类排序不能为空'
+          }, {
+            type: 'number',
+            message: '分类排序必须为数字'
+          }]
+        },
+        /*左边长度*/
+        formLabelWidth: '120px',
+        /*是否显示*/
+        dialogVisible: false,
+        loading: false,
+      };
+    },
+    props: ['open_edit', 'editform'],
+    created() {
+      this.dialogVisible = this.open_edit;
+      this.form.category_id = this.editform.model.category_id;
+      this.form.name = this.editform.model.name;
+      this.form.sort = this.editform.model.sort;
+    },
+    methods: {
+      /*修改用户*/
+      addUser() {
+        let self = this;
+        let params = self.form;
+        self.$refs.form.validate((valid) => {
+          if (valid) {
+            self.loading = true;
+            PlusApi.catEdit(params, true).then(data => {
+              self.loading = false;
+              self.$message({
+                message: '修改成功',
+                type: 'success'
+              });
+              self.dialogFormVisible(true);
+            }).catch(error => {
+              self.loading = false;
+            });
+          }
+        });
+      },
+      /*关闭弹窗*/
+      dialogFormVisible(e) {
+        if (e) {
+          this.$emit('closeDialog', {
+            type: 'success',
+            openDialog: false
+          })
+        } else {
+          this.$emit('closeDialog', {
+            type: 'error',
+            openDialog: false
+          })
+        }
+      },
+
+    }
+  };
+</script>
+
+<style>
+  .img {
+    margin-top: 10px;
+  }
+</style>
diff --git a/supplier_vue/src/views/plus/release/releasecategory/index.vue b/supplier_vue/src/views/plus/release/releasecategory/index.vue
new file mode 100644
index 0000000..2756d4f
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/releasecategory/index.vue
@@ -0,0 +1,130 @@
+<template>
+  <!--
+    	作者:wangxw
+    	时间:2019-10-26
+    	描述:产品分类管理
+    -->
+  <div class="product">
+
+    <!--添加产品分类-->
+    <div class="common-level-rail">
+      <el-button size="small" type="primary" @click="addClick" icon="el-icon-plus" v-auth="'/plus/release/releasecategory/add'">添加分类</el-button>
+    </div>
+
+    <!--内容-->
+    <div class="product-content">
+      <div class="table-wrap">
+        <el-table size="small" :data="tableData"  border style="width: 100%" v-loading="loading">
+          <el-table-column prop="name" label="分类名称" width="180"></el-table-column>
+          <el-table-column prop="sort" label="分类排序"></el-table-column>
+          <el-table-column prop="create_time" label="添加时间"></el-table-column>
+          <el-table-column fixed="right" label="操作" width="100">
+            <template slot-scope="scope">
+              <el-button @click="editClick(scope.row)" type="text" size="small" v-auth="'/plus/release/releasecategory/edit'">编辑</el-button>
+              <el-button @click="deleteClick(scope.row)" type="text" size="small" v-auth="'/plus/release/releasecategory/delete'">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+    </div>
+
+    <!--添加-->
+    <Add v-if="open_add" :open_add="open_add" :addform="categoryModel" @closeDialog="closeDialogFunc($event, 'add')"></Add>
+    <!--修改-->
+    <Edit v-if="open_edit" :open_edit="open_edit" :editform="categoryModel" @closeDialog="closeDialogFunc($event, 'edit')"></Edit>
+
+  </div>
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+  import Add from './Add.vue';
+  import Edit from './Edit.vue';
+  export default {
+    components: {
+      Add,
+      Edit
+    },
+    data() {
+      return {
+        /*是否加载完成*/
+        loading: true,
+        /*列表数据*/
+        tableData: [],
+        /*是否打开添加弹窗*/
+        open_add: false,
+        /*是否打开编辑弹窗*/
+        open_edit: false,
+        /*当前编辑的对象*/
+        categoryModel: {
+          catList: [],
+          model: {}
+        }
+      };
+    },
+    created() {
+      /*获取列表*/
+      this.getData();
+    },
+    methods: {
+      /*获取列表*/
+      getData() {
+        let self = this;
+        PlusApi.catList({}, true)
+          .then(data => {
+            self.loading = false;
+            self.tableData = data.data.list;
+            self.categoryModel.catList = self.tableData;
+          })
+          .catch(error => {
+            self.loading = false;
+          });
+      },
+      /*打开添加*/
+      addClick() {
+        this.open_add = true;
+      },
+
+      /*打开编辑*/
+      editClick(item) {
+        this.categoryModel.model = item;
+        this.open_edit = true;
+      },
+
+      /*关闭弹窗*/
+      closeDialogFunc(e, f) {
+        if (f == 'add') {
+          this.open_add = e.openDialog;
+          if (e.type == 'success') {
+            this.getData();
+          }
+        }
+        if (f == 'edit') {
+          this.open_edit = e.openDialog;
+          if (e.type == 'success') {
+            this.getData();
+          }
+        }
+      },
+      /*删除分类*/
+      deleteClick(row) {
+        let self = this;
+        self.$confirm('删除后不可恢复,确认删除该记录吗?', '提示', {
+          type: 'warning'
+        }).then(() => {
+          PlusApi.catDel({
+            category_id: row.category_id
+          }).then(data => {
+            self.$message({
+              message: '删除成功',
+              type: 'success'
+            });
+            self.getData();
+          });
+        });
+      },
+    }
+  };
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/setting/Setting.vue b/supplier_vue/src/views/plus/release/setting/Setting.vue
new file mode 100644
index 0000000..4c861b6
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/setting/Setting.vue
@@ -0,0 +1,58 @@
+<template>
+  <div v-loading="loading">
+    <el-tabs size="small" v-model="activeName" type="card" @tab-click="handleClick">
+      <el-tab-pane label="设置" name="settlement"></el-tab-pane>
+    </el-tabs>
+
+    <!--结算-->
+    <Settlement v-if="activeName == 'settlement'" :settingData="settingData"></Settlement>
+
+  </div>
+</template>
+<script>
+import PlusApi from '@/api/plus/release.js';
+import Settlement from './part/Settlement';
+export default {
+  components: {
+    /*编辑组件*/
+    Settlement,
+  },
+  data() {
+    return {
+      /*是否正在加载*/
+      loading:true,
+      /*当前选中*/
+      activeName: '',
+      /*数据对象*/
+      settingData:{}
+    };
+  },
+  created() {
+
+    if (this.$route.query.type != null) {
+      this.activeName = this.$route.query.type;
+    }
+
+    this.getData();
+
+  },
+  methods: {
+
+    /*获取数据*/
+    getData() {
+      let self = this;
+      PlusApi.releaseSet({}, true)
+        .then(res => {
+          self.settingData = res.data;
+          self.loading=false;
+          self.activeName='settlement';
+        })
+        .catch(error => {});
+    },
+
+    handleClick(e) {
+      this.activeName = e.name;
+    }
+  }
+};
+</script>
diff --git a/supplier_vue/src/views/plus/release/setting/part/Settlement.vue b/supplier_vue/src/views/plus/release/setting/part/Settlement.vue
new file mode 100644
index 0000000..55a873f
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/setting/part/Settlement.vue
@@ -0,0 +1,102 @@
+<template>
+  <!--
+      	作者:yj
+      -->
+  <div class="mt30">
+
+    <!--form表单-->
+    <el-form size="small" ref="form" :model="form" label-width="200px">
+
+      <el-form-item label="供应方发布消耗" prop="supply_price" :rules="[{required: true,message: ' '}]">
+        <el-input v-model="form.supply_price" type="number" class="max-w460">
+           <template slot="append">连盟币</template>
+        </el-input>
+      </el-form-item>
+      <el-form-item label="需求方发布消耗" prop="demand_price" :rules="[{required: true,message: ' '}]">
+        <el-input v-model="form.demand_price" type="number" class="max-w460">
+           <template slot="append">连盟币</template>
+        </el-input>
+      </el-form-item>
+      <el-form-item label="开通查看信息权限" prop="check_price" :rules="[{required: true,message: ' '}]">
+        <el-input v-model="form.check_price" type="number" class="max-w460">
+           <template slot="append">连盟币</template>
+        </el-input>
+      </el-form-item>
+      <el-form-item label="评论奖励" prop="eve_money" :rules="[{required: true,message: ' '}]">
+        <el-input v-model="form.eve_money" type="number" class="max-w460">
+           <template slot="append">连盟币</template>
+        </el-input>
+      </el-form-item>
+
+
+      <!--提交-->
+      <div class="common-button-wrapper">
+        <el-button size="small" type="primary" @click="onSubmit" :loading="loading">提交</el-button>
+      </div>
+    </el-form>
+  </div>
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+
+  export default {
+    data() {
+      return {
+        /*form表单数据*/
+        form: {
+          pay_type: [
+            10
+          ],
+          explain:'',
+        },
+        list: [],
+        selectlist: [
+          10
+        ],
+        loading: false,
+      };
+    },
+    props: {
+      settingData: Object
+    },
+    created() {
+      this.form=this.settingData.data.settlement.values;
+      this.list = this.settingData.pay_type;
+    },
+
+    methods: {
+
+      /*提交表单*/
+      onSubmit() {
+        let self = this;
+        let params = self.form;
+        self.$refs.form.validate((valid) => {
+          if (valid) {
+            self.loading = true;
+            PlusApi.settlement({
+                form: params
+              }, true)
+              .then(data => {
+                self.loading = false;
+                self.$message({
+                  message: '恭喜你,设置成功',
+                  type: 'success'
+                });
+
+              })
+              .catch(error => {
+                self.loading = false;
+              });
+          }
+        });
+      },
+
+    }
+
+  };
+</script>
+
+<style>
+
+</style>
diff --git "a/supplier_vue/src/views/plus/release/setting/part/Settlement\345\244\207\344\273\275\345\217\257\345\210\240.vue" "b/supplier_vue/src/views/plus/release/setting/part/Settlement\345\244\207\344\273\275\345\217\257\345\210\240.vue"
new file mode 100644
index 0000000..71d38fe
--- /dev/null
+++ "b/supplier_vue/src/views/plus/release/setting/part/Settlement\345\244\207\344\273\275\345\217\257\345\210\240.vue"
@@ -0,0 +1,104 @@
+<template>
+  <!--
+      	作者:yj
+      -->
+  <div class="mt30">
+
+    <!--form表单-->
+    <el-form size="small" ref="form" :model="form" label-width="200px">
+
+      <el-form-item label="提现方式">
+        <el-checkbox-group v-model="form.pay_type">
+          <el-checkbox v-for="(item,index) in list" :label="item.id" :key="index">{{item.name}}</el-checkbox>
+        </el-checkbox-group>
+        <div class="tips">注:如使用微信支付,则需申请微信支付企业付款到零钱功能</div>
+      </el-form-item>
+      <el-form-item label="订单抽成" prop="order_rate" :rules="[{required: true,message: ' '}]">
+        <el-input v-model="form.order_rate" type="number" class="max-w460">
+           <template slot="append">%</template>
+        </el-input>
+      </el-form-item>
+      <el-form-item label="佣金提现手续费" prop="fee_rate" :rules="[{required: true,message: ' '}]">
+        <el-input v-model="form.fee_rate" type="number" class="max-w460">
+           <template slot="append">%</template>
+        </el-input>
+      </el-form-item>
+      <el-form-item label="最低提现额度" prop="min_money" :rules="[{required: true,message: ' '}]">
+        <el-input v-model="form.min_money" type="number" class="max-w460"></el-input>
+      </el-form-item>
+      <el-form-item label="提现说明">
+        <el-input v-model="form.explain" type="textarea" rows="5" class="max-w460"></el-input>
+      </el-form-item>
+
+
+      <!--提交-->
+      <div class="common-button-wrapper">
+        <el-button size="small" type="primary" @click="onSubmit" :loading="loading">提交</el-button>
+      </div>
+    </el-form>
+  </div>
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+
+  export default {
+    data() {
+      return {
+        /*form表单数据*/
+        form: {
+          pay_type: [
+            10
+          ],
+          explain:'',
+        },
+        list: [],
+        selectlist: [
+          10
+        ],
+        loading: false,
+      };
+    },
+    props: {
+      settingData: Object
+    },
+    created() {
+      this.form=this.settingData.data.settlement.values;
+      this.list = this.settingData.pay_type;
+    },
+
+    methods: {
+
+      /*提交表单*/
+      onSubmit() {
+        let self = this;
+        let params = self.form;
+        self.$refs.form.validate((valid) => {
+          if (valid) {
+            self.loading = true;
+            PlusApi.settlement({
+                form: params
+              }, true)
+              .then(data => {
+                self.loading = false;
+                self.$message({
+                  message: '恭喜你,设置成功',
+                  type: 'success'
+                });
+
+              })
+              .catch(error => {
+                self.loading = false;
+              });
+          }
+        });
+      },
+
+    }
+
+  };
+</script>
+
+<style>
+
+</style>
diff --git a/supplier_vue/src/views/plus/release/supply/apply/Apply.vue b/supplier_vue/src/views/plus/release/supply/apply/Apply.vue
new file mode 100644
index 0000000..9479e13
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/supply/apply/Apply.vue
@@ -0,0 +1,168 @@
+<template>
+  <!--
+      	作者:yj
+      	时间:2025-11-9
+      -->
+  <div class="user">
+    <div class="common-seach-wrap">
+      <el-form size="small" :inline="true" :model="formInline" class="demo-form-inline">
+        <el-form-item label=""><el-input v-model="formInline.nick_name" placeholder="请输入昵称/姓名/手机号"></el-input></el-form-item>
+        <el-form-item><el-button type="primary" @click="onSubmit">查询</el-button></el-form-item>
+      </el-form>
+    </div>
+
+    <!--内容-->
+    <div class="product-content">
+      <div class="table-wrap">
+        <el-table :data="tableData" size="small" border style="width: 100%" v-loading="loading">
+          <el-table-column prop="user_id" label="用户ID" width="60"></el-table-column>
+          <el-table-column prop="nickName" label="微信头像" width="70">
+            <template slot-scope="scope">
+              <img class="radius" v-img-url="scope.row.avatarUrl" width="30" height="30" />
+            </template>
+          </el-table-column>
+          <el-table-column prop="nickName" label="	微信昵称" width="250"></el-table-column>
+          <el-table-column prop="real_name" label="姓名" width="100"></el-table-column>
+          <el-table-column prop="mobile" label="手机号">
+            <template slot-scope="scope">
+              <p class="text-ellipsis">{{ scope.row.mobile }}</p>
+            </template>
+          </el-table-column>
+          <!-- <el-table-column prop="detail" label="地址"></el-table-column> -->
+          <el-table-column prop="apply_status" label="审核状态" width="100">
+            <template slot-scope="scope">
+              <span :class="{
+                red: scope.row.apply_status.value == 10,
+                green: scope.row.apply_status.value == 20,
+                gray: scope.row.apply_status.value == 30 }">
+                {{ scope.row.apply_status.text }}
+              </span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="apply_time" label="申请时间" width="135"></el-table-column>
+          <el-table-column fixed="right" label="操作" width="50">
+            <template slot-scope="scope">
+              <div>
+                <el-button v-if="scope.row.apply_status.value == 10" @click="editClick(scope.row)" type="text" size="small">
+                  审核
+                </el-button>
+                <el-button v-if="scope.row.apply_status.value == 30" @click="editClick(scope.row)" type="text" size="small">查看</el-button>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <!--分页-->
+      <div class="pagination">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          background
+          :current-page="curPage"
+          :page-size="pageSize"
+          layout="total, prev, pager, next, jumper"
+          :total="totalDataNumber"
+        ></el-pagination>
+      </div>
+    </div>
+    <Edit v-if="open_edit" :open_edit="open_edit" :form="userModel" @closeDialog="closeDialogFunc($event, 'edit')"></Edit>
+  </div>
+</template>
+
+<script>
+import PlusApi from '@/api/plus/release.js';
+import Edit from './dialog/Edit.vue';
+export default {
+  components: {
+    /*编辑组件*/
+    Edit
+  },
+  data() {
+    return {
+      /*是否加载完成*/
+      loading: true,
+      /*列表数据*/
+      tableData: [],
+      /*一页多少条*/
+      pageSize: 20,
+      /*一共多少条数据*/
+      totalDataNumber: 0,
+      /*当前是第几页*/
+      curPage: 1,
+      formInline: {
+        nick_name: ''
+      },
+      /*是否打开编辑弹窗*/
+      open_edit: false,
+      /*当前编辑的对象*/
+      userModel: {}
+    };
+  },
+  created() {
+    /*获取列表*/
+    this.getData();
+  },
+  methods: {
+    /*选择第几页*/
+    handleCurrentChange(val) {
+      let self = this;
+      self.curPage = val;
+      self.loading = true;
+      self.getData();
+    },
+
+    /*获取数据*/
+    getData() {
+      let self = this;
+      let Params = {};
+      Params.page = self.curPage;
+      Params.list_rows = self.pageSize;
+      Params.nick_name = this.formInline.nick_name;
+      PlusApi.supplyApplyList(Params, true)
+        .then(data => {
+          self.loading = false;
+          self.tableData = data.data.apply_list.data;
+          self.totalDataNumber = data.data.apply_list.total;
+        })
+        .catch(error => {});
+    },
+
+    //搜索
+    onSubmit() {
+      this.curPage = 1;
+      this.getData();
+    },
+
+    /*每页多少条*/
+    handleSizeChange(val) {
+      this.curPage = 1;
+      this.getData();
+    },
+
+    /*打开弹出层编辑*/
+    editClick(item) {
+      this.userModel = item;
+      this.open_edit = true;
+    },
+
+    /*关闭弹窗*/
+    closeDialogFunc(e, f) {
+      if (f == 'add') {
+        this.open_add = e.openDialog;
+        if (e.type == 'success') {
+          this.getData();
+        }
+      }
+      if (f == 'edit') {
+        this.open_edit = e.openDialog;
+        if (e.type == 'success') {
+          this.getData();
+        }
+      }
+    }
+  }
+};
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/supply/apply/dialog/Edit.vue b/supplier_vue/src/views/plus/release/supply/apply/dialog/Edit.vue
new file mode 100644
index 0000000..0f9f98a
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/supply/apply/dialog/Edit.vue
@@ -0,0 +1,88 @@
+<template>
+  <!--
+      	作者:yj
+      	时间:2025-11-9
+      -->
+  <div v-if="status != 30">
+    <el-dialog title="入驻审核" :visible.sync="dialogVisible" @close="dialogFormVisible" :close-on-click-modal="false" :close-on-press-escape="false">
+      <el-form :model="form">
+        <el-form-item label="审核状态" :label-width="formLabelWidth">
+          <div>
+            <el-radio v-model="form.apply_status" label="20">审核通过</el-radio>
+            <el-radio v-model="form.apply_status" label="30">驳回</el-radio>
+          </div>
+        </el-form-item>
+        <div v-if="form.apply_status == 30">
+          <el-form-item label="驳回原因" :label-width="formLabelWidth"><el-input v-model="form.reject_reason" autocomplete="off"></el-input></el-form-item>
+        </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible">取 消</el-button>
+        <el-button type="primary" @click="editApplyStatus">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+
+  <div v-else>
+    <el-dialog title="驳回原因" :visible.sync="dialogVisible" @close="dialogFormVisible" :close-on-click-modal="false" :close-on-press-escape="false">
+      <p>{{ reject_reason }}</p>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import PlusApi from '@/api/plus/release.js';
+export default {
+  data() {
+    return {
+      status: '',
+      reject_reason: '',
+      /*左边长度*/
+      formLabelWidth: '120px',
+      /*是否显示*/
+      dialogVisible: false
+    };
+  },
+  props: ['open_edit', 'form'],
+  created() {
+    this.dialogVisible = this.open_edit;
+    this.status = this.form.apply_status.value;
+    if (this.status == 30) {
+      this.reject_reason = this.form.reject_reason;
+    }
+  },
+  methods: {
+    /*修改用户*/
+    editApplyStatus() {
+      let self = this;
+      let params = this.form;
+      PlusApi.editSupplyApplyStatus(params, true)
+        .then(data => {
+          self.$message({
+            message: '恭喜你,修改成功',
+            type: 'success'
+          });
+          self.dialogFormVisible(true);
+        })
+        .catch(error => {});
+    },
+
+    /*关闭弹窗*/
+    dialogFormVisible(e) {
+      if (e) {
+        this.$emit('closeDialog', {
+          type: 'success',
+          openDialog: false
+        });
+      } else {
+        this.$emit('closeDialog', {
+          type: 'error',
+          openDialog: false
+        });
+      }
+    }
+  }
+};
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/supply/user/User.vue b/supplier_vue/src/views/plus/release/supply/user/User.vue
new file mode 100644
index 0000000..f426960
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/supply/user/User.vue
@@ -0,0 +1,214 @@
+<template>
+  <!--
+      	作者:yj
+      	时间:2025-11-9
+      -->
+  <div class="user">
+    <div class="common-seach-wrap">
+      <el-form size="small" :inline="true" :model="formInline" class="demo-form-inline">
+        <el-form-item label=""><el-input v-model="formInline.nick_name" placeholder="请输入昵称/姓名/手机号"></el-input></el-form-item>
+        <el-form-item><el-button type="primary" @click="onSubmit">查询</el-button></el-form-item>
+      </el-form>
+    </div>
+
+    <!--内容-->
+    <div class="product-content">
+      <div class="table-wrap">
+        <el-table size="small" :data="tableData" border style="width: 100%" v-loading="loading">
+          <el-table-column prop="user_id" label="用户ID" width="70"></el-table-column>
+          <el-table-column prop="nickName" label="微信头像" width="70">
+            <template slot-scope="scope">
+              <img class="radius" v-img-url="scope.row.avatarUrl" width="30" height="30" />
+            </template>
+          </el-table-column>
+          <el-table-column prop="nickName" label="微信昵称" width="250"></el-table-column>
+          <el-table-column prop="real_name" label="姓名" width="100"></el-table-column>
+          <el-table-column prop="mobile" label="手机号"></el-table-column>
+         <!-- <el-table-column prop="detail" label="地址"></el-table-column> -->
+         <el-table-column prop="" label="会员等级">
+           <template slot-scope="scope">
+             <span v-if="scope.row.grade_id == 0">无等级</span>
+             <span v-else>{{ scope.row.grade.name }}</span>
+           </template>
+         </el-table-column>
+          <el-table-column prop="create_time" label="成为时间" width="140"></el-table-column>
+          <el-table-column fixed="right" label="操作" width="160">
+            <template slot-scope="scope">
+              <div>
+                <!-- <el-button @click="saleClick(scope.row)" type="text" size="small">供应订单</el-button> -->
+                <el-button @click="EditClick(scope.row)" type="text" size="small">修改</el-button>
+                <el-button @click="delClick(scope.row)" type="text" size="small">删除</el-button>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <!--分页-->
+      <div class="pagination">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          background
+          :current-page="curPage"
+          :page-size="pageSize"
+          layout="total, prev, pager, next, jumper"
+          :total="totalDataNumber"
+        ></el-pagination>
+      </div>
+    </div>
+
+    <!--编辑-->
+    <Edit :open_edit="open_edit" :userModel="userModel"  :gradeList="gradeList" @close="closeEditFunc"></Edit>
+
+  </div>
+</template>
+
+<script>
+import { deepClone } from '@/utils/base.js'
+import PlusApi from '@/api/plus/release.js';
+import Edit from './dialog/Edit.vue';
+export default {
+  components: {
+    Edit,
+  },
+  data() {
+    return {
+      /*是否加载完成*/
+      loading: true,
+      /*列表数据*/
+      tableData: [],
+      /*一页多少条*/
+      pageSize: 20,
+      /*一共多少条数据*/
+      totalDataNumber: 0,
+      /*当前是第几页*/
+      curPage: 1,
+      /*搜索对象*/
+      formInline: {
+        nick_name: ''
+      },
+      /*是否打开弹窗*/
+      open_dialog: false,
+      /*选中的用户*/
+      userModel:{},
+      /*是否打开修改*/
+      open_edit:false,
+      /*等级*/
+      gradeList: [],
+    };
+  },
+  created() {
+    /*获取列表*/
+    this.getData();
+  },
+  methods: {
+    /*选择第几页*/
+    handleCurrentChange(val) {
+      let self = this;
+      self.curPage = val;
+      self.loading = true;
+      self.getData();
+    },
+
+    /*获取数据*/
+    getData() {
+      let self = this;
+      let Params = {};
+      Params.page = self.curPage;
+      Params.list_rows = self.pageSize;
+      if(self.formInline.nick_name!=''){
+        Params.nick_name=self.formInline.nick_name;
+      }
+      PlusApi.supplyUserList(Params, true)
+        .then(data => {
+          self.loading = false;
+          self.tableData = data.data.list.data;
+          self.totalDataNumber = data.data.list.total;
+          self.gradeList = data.data.grade;
+        })
+        .catch(error => {
+          self.loading = false;
+        });
+    },
+
+    //搜索
+    onSubmit() {
+      this.curPage = 1;
+      this.getData();
+    },
+
+    /*每页多少条*/
+    handleSizeChange(val) {
+      this.curPage = 1;
+      this.pageSize = val;
+      this.getData();
+    },
+
+    /*维修订单*/
+    saleClick(item) {
+      this.$router.push({
+        path:'/plus/release/index',
+        query:{
+          type:'supplyorder',
+          repair_user_id:item.user_id
+        }
+      })
+    },
+
+
+    /*删除*/
+    delClick(row) {
+      let self = this;
+      self
+        .$confirm('此操作将永久删除该记录, 是否继续?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        })
+        .then(() => {
+          self.loading = true;
+          PlusApi.deleteSupplyUser(
+            {
+              user_id: row.user_id
+            },
+            true
+          )
+            .then(data => {
+              self.loading = false;
+              self.$message({
+                message: data.msg,
+                type: 'success'
+              });
+              self.getData();
+            })
+            .catch(error => {
+              self.loading = false;
+            });
+        })
+        .catch(() => {
+          self.loading = false;
+        });
+    },
+
+     /*打开编辑用户弹窗*/
+    EditClick(e){
+      this.userModel=deepClone(e);
+      this.open_edit=true;
+    },
+
+    /*关闭编辑用户弹窗*/
+    closeEditFunc(e){
+      this.open_edit=false;
+      if(e.type=='success'){
+        this.getData();
+      }
+    }
+
+  }
+};
+</script>
+
+<style scoped="scoped">
+  .el-button{margin-left: 0; margin-right: 10px;}
+</style>
diff --git a/supplier_vue/src/views/plus/release/supply/user/dialog/Edit.vue b/supplier_vue/src/views/plus/release/supply/user/dialog/Edit.vue
new file mode 100644
index 0000000..7541eb9
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/supply/user/dialog/Edit.vue
@@ -0,0 +1,93 @@
+<template>
+  <!--
+      	作者:yj
+      -->
+  <el-dialog title="编辑" :visible.sync="dialogVisible" @close="cancelFunc" :close-on-click-modal="false" :close-on-press-escape="false" width="60%">
+    <el-form :model="formData">
+      <el-form-item label="微信昵称" :label-width="formLabelWidth">
+        <el-input type="text" v-model="formData.nickName" autocomplete="off" :disabled="true"></el-input>
+      </el-form-item>
+      <el-form-item label="微信头像" :label-width="formLabelWidth">
+        <img v-img-url="formData.avatarUrl" width="50" height="50" />
+      </el-form-item>
+      <el-form-item label="姓名" :label-width="formLabelWidth">
+        <el-input type="text" v-model="formData.real_name" autocomplete="off"></el-input>
+      </el-form-item>
+      <el-form-item label="手机号" :label-width="formLabelWidth">
+        <el-input type="text" v-model="formData.mobile" autocomplete="off"></el-input>
+      </el-form-item>
+      <el-form-item label="等级" :label-width="formLabelWidth">
+        <el-select v-model="formData.grade_id" placeholder="-请选择等级-">
+          <el-option v-for="(item,index) in gradeList" :key="index" :label="item.name" :value="item.grade_id"></el-option>
+        </el-select>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="cancelFunc">取 消</el-button>
+      <el-button type="primary" @click="confirmFunc">确 定</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import PlusApi from '@/api/plus/release.js';
+import UserApi from '@/api/user.js';
+export default {
+  data() {
+    return {
+      /*左边长度*/
+      formLabelWidth: '100px',
+      /*是否显示*/
+      dialogVisible: false,
+      /*表单数据模型*/
+      formData: {},
+    };
+  },
+  props: ['open_edit','userModel','gradeList'],
+  watch: {
+    open_edit: function(n, o) {
+      if (n != o) {
+        this.dialogVisible = this.open_edit;
+        if (n) {
+          this.formData = this.userModel;
+        }
+      }
+    }
+  },
+  created() {
+
+  },
+  methods: {
+    /*修改用户*/
+    confirmFunc() {
+      let self = this;
+      let params ={};
+      params.user_id= this.formData.user_id;
+      params.real_name=this.formData.real_name;
+      params.mobile=this.formData.mobile;
+      params.grade_id=this.formData.grade_id;
+      PlusApi.supplyUserEdit(params, true)
+        .then(data => {
+          self.$message({
+            message: '恭喜你,修改成功',
+            type: 'success'
+          });
+          self.cancelFunc(true);
+        })
+        .catch(error => {});
+    },
+    /*关闭弹窗*/
+    cancelFunc(e) {
+      let type='cancel';
+      if(e){
+        type='success';
+      }
+      this.$emit('close', {
+        type:type
+      });
+    }
+  }
+};
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/supplyproject/Edit.vue b/supplier_vue/src/views/plus/release/supplyproject/Edit.vue
new file mode 100644
index 0000000..801189c
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/supplyproject/Edit.vue
@@ -0,0 +1,77 @@
+<template>
+  <!--
+      作者:yj
+  -->
+  <el-dialog title="详情" :visible.sync="dialogVisible" @close='dialogFormVisible' :close-on-click-modal="false"
+    :close-on-press-escape="false" width="600px">
+    <el-form size="small" :model="form" ref="form">
+      <el-form-item label="标题:" :label-width="formLabelWidth">
+        {{form.name}}
+      </el-form-item>
+      <el-form-item label="分类:" :label-width="formLabelWidth">
+        {{form.category.name}}
+      </el-form-item>
+      <el-form-item label="价格:" :label-width="formLabelWidth">
+        ¥{{form.price}}
+      </el-form-item>
+      <el-form-item label="详细描述:" :label-width="formLabelWidth" >
+        {{form.content}}
+      </el-form-item>
+      <el-form-item label="图片:" :label-width="formLabelWidth">
+         <div v-if="form.image_list" v-for="(item,index) in form.image_list">
+          <a target="_blank" :href="item.file_path"><img style="max-width: 50px; height: 50px;" v-img-url="item.file_path" />
+          </a>
+        </div>
+      </el-form-item>
+      <el-form-item label="交付时间:" :label-width="formLabelWidth" >
+        {{form.finish_time}}
+      </el-form-item>
+      <el-form-item label="服务地点:" :label-width="formLabelWidth">
+        {{form.detail}}
+      </el-form-item>
+      <el-form-item label="标签:" :label-width="formLabelWidth">
+        <span v-if="form.tag_list" v-for="(item,index) in form.tag_list">{{item.name}};</span>
+      </el-form-item>
+
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="dialogFormVisible">返回</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  export default {
+    data() {
+      return {
+        /*左边长度*/
+        formLabelWidth: '120px',
+        /*是否显示*/
+        dialogVisible: false,
+      };
+    },
+    props: ['open_edit', 'form'],
+    created() {
+      this.dialogVisible = this.open_edit;
+    },
+    methods: {
+      /*关闭弹窗*/
+      dialogFormVisible(e) {
+        if (e) {
+          this.$emit('closeDialog', {
+            type: 'success',
+            openDialog: false
+          })
+        } else {
+          this.$emit('closeDialog', {
+            type: 'error',
+            openDialog: false
+          })
+        }
+      }
+
+    }
+  };
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/supplyproject/dialog/Edit.vue b/supplier_vue/src/views/plus/release/supplyproject/dialog/Edit.vue
new file mode 100644
index 0000000..250b71f
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/supplyproject/dialog/Edit.vue
@@ -0,0 +1,92 @@
+<template>
+  <!--
+      	作者:yj
+      -->
+  <div v-if="status != 2">
+    <el-dialog title="审核" :visible.sync="dialogVisible" @close="dialogFormVisible" :close-on-click-modal="false" :close-on-press-escape="false">
+      <el-form :model="form">
+        <el-form-item label="审核状态" :label-width="formLabelWidth">
+          <div>
+            <el-radio v-model="form.status" label="1">审核通过</el-radio>
+            <el-radio v-model="form.status" label="2">驳回</el-radio>
+          </div>
+        </el-form-item>
+        <div v-if="form.apply_status == 2">
+          <el-form-item label="驳回原因" :label-width="formLabelWidth"><el-input v-model="form.reject_reason" autocomplete="off"></el-input></el-form-item>
+        </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible">取 消</el-button>
+        <el-button type="primary" @click="editApplyStatus">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+
+  <div v-else>
+    <el-dialog title="驳回原因" :visible.sync="dialogVisible" @close="dialogFormVisible" :close-on-click-modal="false" :close-on-press-escape="false">
+      <p>{{ reject_reason }}</p>
+      <!-- <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible">取 消</el-button>
+        <el-button type="primary" @click="dialogFormVisible">确 定</el-button>
+      </div> -->
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import PlusApi from '@/api/plus/release.js';
+export default {
+  data() {
+    return {
+      status: '',
+      reject_reason: '',
+      /*左边长度*/
+      formLabelWidth: '120px',
+      /*是否显示*/
+      dialogVisible: false
+    };
+  },
+  props: ['open_edit', 'form'],
+  created() {
+    this.dialogVisible = this.open_edit;
+    this.status = this.form.status.value;
+    if (this.status == 30) {
+      this.reject_reason = this.form.reject_reason;
+    }
+  },
+  methods: {
+
+    /*修改*/
+    editApplyStatus() {
+      let self = this;
+      let params = this.form;
+      PlusApi.supplyProjectSubmit(params, true)
+        .then(data => {
+          self.$message({
+            message: '恭喜你,修改成功',
+            type: 'success'
+          });
+          self.dialogFormVisible(true);
+        })
+        .catch(error => {});
+    },
+
+    /*关闭弹窗*/
+    dialogFormVisible(e) {
+      if (e) {
+        this.$emit('closeDialog', {
+          type: 'success',
+          openDialog: false
+        });
+      } else {
+        this.$emit('closeDialog', {
+          type: 'error',
+          openDialog: false
+        });
+      }
+    }
+  }
+};
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/supplyproject/index.vue b/supplier_vue/src/views/plus/release/supplyproject/index.vue
new file mode 100644
index 0000000..859c674
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/supplyproject/index.vue
@@ -0,0 +1,227 @@
+<template>
+  <!--
+          作者:yj
+      -->
+  <div class="user">
+    <!--搜索表单-->
+    <div class="common-seach-wrap">
+      <el-form size="small" :inline="true" :model="searchForm" class="demo-form-inline">
+        <!-- <el-form-item label="类目">
+          <el-select size="small" v-model="searchForm.category_id" placeholder="所有分类">
+            <el-option label="全部" value="0"></el-option>
+            <el-option v-for="(item, index) in categoryList" :key="index" :label="item.name" :value="item.category_id">
+            </el-option>
+          </el-select>
+        </el-form-item> -->
+        <el-form-item label="标题">
+          <el-input size="small" v-model="searchForm.name" placeholder="请输入标题"></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="small" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
+    <!--内容-->
+    <div class="product-content">
+      <div class="table-wrap">
+        <el-table size="small" :data="tableData" border style="width: 100%" v-loading="loading">
+          <el-table-column prop="project_id" label="ID" width="100"></el-table-column>
+          <el-table-column prop="name" label="标题"></el-table-column>
+          <el-table-column prop="category.name" label="分类" width="200"></el-table-column>
+          <el-table-column prop="price" label="价格" width="200"></el-table-column>
+          <el-table-column prop="status" label="状态"  width="200">
+            <template slot-scope="scope">
+              <span v-if="scope.row.status == 0">未审核</span>
+              <span v-if="scope.row.status == 1" class="green">已通过</span>
+              <span v-if="scope.row.status == 2" class="green">已驳回</span>
+            </template>
+          </el-table-column>
+          <el-table-column fixed="right" label="操作" width="200">
+            <template slot-scope="scope">
+              <el-button v-if="scope.row.status == 0" @click="shClick(scope.row)" type="text" size="small">审核</el-button>
+              <el-button @click="editClick(scope.row)" type="text" size="small" >详情</el-button>
+              <el-button @click="evaluateClick(scope.row)" type="text" size="small" >评论列表</el-button>
+              <el-button @click="deleteClick(scope.row)" type="text" size="small">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <!--分页-->
+      <div class="pagination">
+        <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" background
+          :current-page="curPage" :page-size="pageSize" layout="total, prev, pager, next, jumper"
+          :total="totalDataNumber"></el-pagination>
+      </div>
+
+    </div>
+    <!--编辑-->
+    <Edit v-if="open_edit" :open_edit="open_edit" :form="userModel" @closeDialog="closeDialogFunc($event, 'edit')"></Edit>
+
+    <Editsh v-if="open_sh" :open_edit="open_sh" :form="userModel" @closeDialog="closeDialogFunc($event, 'editsh')"></Editsh>
+  </div>
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+  import Edit from './Edit.vue';
+  import Editsh from './dialog/Edit.vue';
+
+  import {deepClone} from '@/utils/base.js';
+  export default {
+    components: {
+      /*编辑组件*/
+      Edit,
+      Editsh,
+    },
+    data() {
+      return {
+        /*是否加载完成*/
+        loading: true,
+        /*一页多少条*/
+        pageSize: 10,
+        /*一共多少条数据*/
+        totalDataNumber: 0,
+        /*当前是第几页*/
+        curPage: 1,
+        /*列表数据*/
+        tableData: [],
+        /*横向表单数据模型*/
+        /*搜索参数*/
+        searchForm: {
+          name: '',
+          category_id: ''
+        },
+        /*是否打开编辑弹窗*/
+        open_edit: false,
+        /*当前编辑的对象*/
+        userModel: {},
+        open_sh:false,
+      };
+    },
+    created() {
+      /*获取列表*/
+      this.getTableList();
+
+    },
+    methods: {
+      /*选择第几页*/
+      handleCurrentChange(val) {
+        let self = this;
+        self.loading = true;
+        self.curPage = val;
+        self.getTableList();
+      },
+
+      /*每页多少条*/
+      handleSizeChange(val) {
+        this.pageSize = val;
+        this.getTableList();
+      },
+
+      evaluateClick(item) {
+        let self = this;
+        let params = item.project_id;
+        this.$router.push({
+          path: '/plus/release/evaluate/list',
+          query: {
+            project_id: params
+          }
+        });
+      },
+
+
+      /*获取列表*/
+      getTableList() {
+        let self = this;
+        let Params = self.searchForm;
+        Params.page = self.curPage;
+        Params.list_rows = self.pageSize;
+        PlusApi.supplyProject(Params, true)
+          .then(data => {
+            self.loading = false;
+            self.tableData = data.data.list.data;
+            self.totalDataNumber = data.data.list.total;
+          })
+          .catch(error => {
+
+          });
+      },
+      /*搜索查询*/
+      onSubmit() {
+        this.curPage = 1;
+        this.getTableList();
+      },
+
+      /*打开编辑*/
+      editClick(item) {
+        this.userModel = deepClone(item);
+        this.open_edit = true;
+      },
+
+      /*打开弹出层审核*/
+      shClick(item) {
+        this.userModel = item;
+        this.open_sh = true;
+      },
+
+      /*关闭弹窗*/
+      closeDialogFunc(e, f) {
+        if (f == 'add') {
+          this.open_add = e.openDialog;
+          if (e.type == 'success') {
+            this.getTableList();
+          }
+        }
+        if (f == 'edit') {
+          this.open_edit = e.openDialog;
+          if (e.type == 'success') {
+            this.getTableList();
+          }
+        }
+        if (f == 'editsh') {
+          this.open_sh = e.openDialog;
+          if (e.type == 'success') {
+            this.getTableList();
+          }
+        }
+      },
+
+      /*删除*/
+      deleteClick(row) {
+        let self = this;
+        self.$confirm('此操作将永久删除该记录, 是否继续?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          self.loading = true;
+          PlusApi.supplyDel({
+              project_id: row.project_id
+            }, true)
+            .then(data => {
+              self.loading = false;
+              if (data.code == 1) {
+                self.$message({
+                  message: data.msg,
+                  type: 'success'
+                });
+                self.getTableList();
+              } else {
+                self.$message.error('错了哦,这是一条错误消息');
+              }
+            })
+            .catch(error => {
+              self.loading = false;
+            });
+
+        }).catch(() => {
+
+        });
+      }
+
+    }
+  };
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/tag/Add.vue b/supplier_vue/src/views/plus/release/tag/Add.vue
new file mode 100644
index 0000000..969f3c9
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/tag/Add.vue
@@ -0,0 +1,86 @@
+<template>
+  <!--
+      作者:yj
+  -->
+  <el-dialog title="添加" :visible.sync="dialogVisible" @close='dialogFormVisible' :close-on-click-modal="false"
+    :close-on-press-escape="false" width="600px">
+    <el-form size="small" :model="form" ref="form">
+      <el-form-item label="名称" :label-width="formLabelWidth" prop="name" :rules="[{required: true,message: '请输入名称'}]">
+        <el-input v-model="form.name" placeholder="请输入名称"></el-input>
+      </el-form-item>
+      <el-form-item label="排序" :label-width="formLabelWidth" prop="sort" :rules="[{required: true,message: '请输入排序'}]">
+        <el-input v-model="form.sort" type="number" placeholder="请输入排序"></el-input>
+        <div class="gray9">数字越大,越排前</div>
+      </el-form-item>
+   </el-form>
+
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="dialogFormVisible">取 消</el-button>
+      <el-button type="primary" @click="add()" :disabled="submit_loading">确 定</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+  export default {
+    data() {
+      return {
+        form: {
+          name: '',
+          sort: 100,
+        },
+        /*左边长度*/
+        formLabelWidth: '120px',
+        /*是否显示*/
+        dialogVisible: false,
+        /*是否正在提交*/
+        submit_loading: false,
+      };
+    },
+    props: ['open_add'],
+    created() {
+      this.dialogVisible = this.open_add;
+    },
+    methods: {
+      /*添加*/
+      add() {
+        let self = this;
+        let params = this.form;
+        self.$refs.form.validate((valid) => {
+          if (valid) {
+            self.submit_loading = true;
+            PlusApi.addTag(params, true).then(data => {
+                self.submit_loading = false;
+                self.$message({
+                  message: data.msg,
+                  type: 'success'
+                });
+                self.dialogFormVisible(true);
+              })
+              .catch(error => {
+                self.submit_loading = false;
+              });
+          }
+        });
+      },
+      /*关闭弹窗*/
+      dialogFormVisible(e) {
+        if (e) {
+          this.$emit('closeDialog', {
+            type: 'success',
+            openDialog: false
+          })
+        } else {
+          this.$emit('closeDialog', {
+            type: 'error',
+            openDialog: false
+          })
+        }
+      }
+
+    }
+  };
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/tag/Edit.vue b/supplier_vue/src/views/plus/release/tag/Edit.vue
new file mode 100644
index 0000000..67ae166
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/tag/Edit.vue
@@ -0,0 +1,85 @@
+<template>
+  <!--
+      作者:yj
+  -->
+  <el-dialog title="编辑" :visible.sync="dialogVisible" @close='dialogFormVisible' :close-on-click-modal="false"
+    :close-on-press-escape="false" width="600px">
+    <el-form size="small" :model="form" ref="form">
+      <el-form-item label="名称" :label-width="formLabelWidth" prop="name" :rules="[{required: true,message: ' '}]">
+        <el-input v-model="form.name" autocomplete="off"></el-input>
+      </el-form-item>
+      <el-form-item label="排序" :label-width="formLabelWidth" prop="sort" :rules="[{required: true,message: '请输入排序'}]">
+          <el-input v-model="form.sort" type="number" placeholder="请输入排序"></el-input>
+          <div class="gray9">数字越大,越排前</div>
+        </el-form-item>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="dialogFormVisible">取 消</el-button>
+      <el-button type="primary" @click="edit" :disabled="submit_loading">确 定</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+  export default {
+    data() {
+      return {
+        /*左边长度*/
+        formLabelWidth: '120px',
+        /*是否显示*/
+        dialogVisible: false,
+        /*是否正在提交*/
+        submit_loading: false,
+      };
+    },
+    props: ['open_edit', 'form'],
+    created() {
+      this.dialogVisible = this.open_edit;
+    },
+    methods: {
+      /*修改*/
+      edit() {
+        let self = this;
+        let params = this.form;
+        self.$refs.form.validate((valid) => {
+          if (valid) {
+            self.submit_loading = true;
+            PlusApi.editTag(params, true)
+              .then(data => {
+                self.submit_loading = false;
+                self.$message({
+                  message: '恭喜你,修改成功',
+                  type: 'success'
+                });
+                self.dialogFormVisible(true);
+
+              })
+              .catch(error => {
+                self.submit_loading = false;
+              });
+
+          }
+        });
+      },
+
+      /*关闭弹窗*/
+      dialogFormVisible(e) {
+        if (e) {
+          this.$emit('closeDialog', {
+            type: 'success',
+            openDialog: false
+          })
+        } else {
+          this.$emit('closeDialog', {
+            type: 'error',
+            openDialog: false
+          })
+        }
+      }
+
+    }
+  };
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/release/tag/index.vue b/supplier_vue/src/views/plus/release/tag/index.vue
new file mode 100644
index 0000000..ea9e255
--- /dev/null
+++ b/supplier_vue/src/views/plus/release/tag/index.vue
@@ -0,0 +1,147 @@
+<template>
+  <!--
+          作者:yj
+      -->
+  <div class="user">
+    <!--添加-->
+    <div class="common-level-rail">
+      <el-button size="small" type="primary" @click="addClick" icon="el-icon-plus" v-auth="'/plus/release/tag/add'">添加标签</el-button>
+    </div>
+    <!--内容-->
+    <div class="product-content">
+      <div class="table-wrap">
+        <el-table size="small" :data="tableData" border style="width: 100%" v-loading="loading">
+          <el-table-column prop="tag_id" label="标签ID" width="100"></el-table-column>
+          <el-table-column prop="name" label="名称"></el-table-column>
+          <el-table-column prop="sort" label="排序" width="200"></el-table-column>
+          <el-table-column fixed="right" label="操作" width="90">
+            <template slot-scope="scope">
+              <el-button @click="editClick(scope.row)" type="text" size="small" v-auth="'/plus/release/tag/edit'" >编辑</el-button>
+              <el-button @click="deleteClick(scope.row)" type="text" size="small" v-auth="'/plus/release/tag/delete'">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+    </div>
+    <!--添加-->
+    <Add v-if="open_add" :open_add="open_add" @closeDialog="closeDialogFunc($event, 'add')"></Add>
+    <!--编辑-->
+    <Edit v-if="open_edit" :open_edit="open_edit" :form="userModel" @closeDialog="closeDialogFunc($event, 'edit')"></Edit>
+  </div>
+</template>
+
+<script>
+  import PlusApi from '@/api/plus/release.js';
+  import Edit from './Edit.vue';
+  import Add from './Add.vue';
+  import {deepClone} from '@/utils/base.js';
+  export default {
+    components: {
+      /*编辑组件*/
+      Edit,
+      Add
+    },
+    data() {
+      return {
+        /*是否加载完成*/
+        loading: true,
+        /*列表数据*/
+        tableData: [],
+        /*横向表单数据模型*/
+        form: {
+          become: '0'
+        },
+        /*是否打开添加弹窗*/
+        open_add: false,
+        /*是否打开编辑弹窗*/
+        open_edit: false,
+        /*当前编辑的对象*/
+        userModel: {}
+      };
+    },
+    created() {
+      /*获取列表*/
+      this.getTableList();
+
+    },
+    methods: {
+
+      /*获取列表*/
+      getTableList() {
+        let self = this;
+        let Params = {};
+        PlusApi.Tag(Params, true)
+          .then(data => {
+            self.loading = false;
+            self.tableData = data.data.list;
+          })
+          .catch(error => {
+
+          });
+      },
+
+      /*打开添加*/
+      addClick() {
+        this.open_add = true;
+      },
+
+      /*打开编辑*/
+      editClick(item) {
+        this.userModel = deepClone(item);
+        this.open_edit = true;
+      },
+
+      /*关闭弹窗*/
+      closeDialogFunc(e, f) {
+        if (f == 'add') {
+          this.open_add = e.openDialog;
+          if (e.type == 'success') {
+            this.getTableList();
+          }
+        }
+        if (f == 'edit') {
+          this.open_edit = e.openDialog;
+          if (e.type == 'success') {
+            this.getTableList();
+          }
+        }
+      },
+
+      /*删除*/
+      deleteClick(row) {
+        let self = this;
+        self.$confirm('此操作将永久删除该记录, 是否继续?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          self.loading = true;
+          PlusApi.deleteTag({
+              tag_id: row.tag_id
+            }, true)
+            .then(data => {
+              self.loading = false;
+              if (data.code == 1) {
+                self.$message({
+                  message: data.msg,
+                  type: 'success'
+                });
+                self.getTableList();
+              } else {
+                self.$message.error('错了哦,这是一条错误消息');
+              }
+            })
+            .catch(error => {
+              self.loading = false;
+            });
+
+        }).catch(() => {
+
+        });
+      }
+
+    }
+  };
+</script>
+
+<style></style>
diff --git a/supplier_vue/src/views/plus/vip/setting/part/Basic.vue b/supplier_vue/src/views/plus/vip/setting/part/Basic.vue
index 69cc700..4e40090 100644
--- a/supplier_vue/src/views/plus/vip/setting/part/Basic.vue
+++ b/supplier_vue/src/views/plus/vip/setting/part/Basic.vue
@@ -13,6 +13,24 @@
           <el-radio v-model="form.is_open" label="0">关闭</el-radio>
         </div>
       </el-form-item>
+      <el-form-item label="是否开启级差奖">
+        <div>
+          <el-radio v-model="form.jcaward" label="1">开启</el-radio>
+          <el-radio v-model="form.jcaward" label="0">关闭</el-radio>
+        </div>
+      </el-form-item>
+      <el-form-item label="是否开启平级奖">
+        <div>
+          <el-radio v-model="form.pjaward" label="1">开启</el-radio>
+          <el-radio v-model="form.pjaward" label="0">关闭</el-radio>
+        </div>
+      </el-form-item>
+      <el-form-item label="平级奖励层级" v-if="form.pjaward==1">
+        <div>
+          <el-input v-model="form.pjaward_level" type="number" class="max-w460"></el-input>
+          <div class="tips">默认1级,即只往上找一个平级</div>
+        </div>
+      </el-form-item>
       <el-form-item label="成为VIP需要购买的商品">
         <div>
           <el-row>
@@ -34,6 +52,33 @@
         </el-input>
         <div class="tips">用户直推指定数量的用户后,即可享受平台佣金</div>
       </el-form-item>
+
+      <el-form-item label="复购专区奖条件" name="second">
+        <label>推荐VIP会员人数</label>
+        <el-input v-model="form.viewpoint_buy_count" type="number" class="max-w460">
+          <template slot="append">人</template>
+        </el-input>
+        <label>每月复购专区消费</label>
+        <el-input v-model="form.repurchase_consumption" type="number" class="max-w460">
+          <template slot="append">元</template>
+        </el-input>
+        <div class="tips">用户满足条件后,即可享复购专区奖</div>
+      </el-form-item>
+      <el-form-item label="下级收益补贴条件" name="second">
+        <label>直推指定等级</label>
+        <el-select v-model="form.referee_grade_ids" multiple style="width: 160px; margin-left: 10px;">
+          <el-option
+            v-for="item in userGradeList"
+            :key="item.grade_id"
+            :label="item.name"
+            :value="item.grade_id">
+          </el-option>
+        </el-select>
+        <label>直推人数</label>
+        <el-input v-model="form.referee_grade_count" type="number"  style="width: 160px; margin-left: 10px;" ></el-input>
+        <span class="ml10">人</span>
+        <div class="tips">直推多少用户指定会员等级后,即可享受享受下级收益补贴</div>
+      </el-form-item>
       <!--提交-->
       <div class="common-button-wrapper">
         <el-button size="small" type="primary" @click="onSubmit" :loading="loading">提交</el-button>
@@ -47,6 +92,7 @@
 <script>
 import PlusApi from '@/api/plus/vip.js';
 import Product from '@/components/product/Product';
+import UserApi from '@/api/user.js';
 
 export default {
   components: {
@@ -60,8 +106,12 @@
         is_open: '0',
         become__buy_product_ids: [],
         referee_buy_count: '0',
-        product_image: []
+        product_image: [],
+        jcaward: '0',
+        pjaward: '0',
+        pjaward_level: '1'
       },
+      userGradeList:[],
       /*是否打开产品弹出层*/
       isproduct: false,
       /*是否正在加载*/
@@ -73,9 +123,23 @@
   },
   created() {
     this.form = this.settingData.data.basic.values;
-    console.log(this.form)
+    console.log(this.form.referee_grade_ids);
+    // 等级id转换成数组
+    for (let i = 0; i < this.form.referee_grade_ids.length; i++) {
+      this.form.referee_grade_ids[i] = parseInt(this.form.referee_grade_ids[i]);
+    }
+    this.getUserGradeList();
   },
   methods: {
+    /*获取用户管理模块的等级列表*/
+    getUserGradeList() {
+      let self = this;
+      UserApi.gradelist({}, true)
+        .then(res => {
+          self.userGradeList = res.data.list.data || res.data.list;
+        })
+        .catch(error => {});
+    },
     /*提交表单*/
     onSubmit() {
       let self = this;

--
Gitblit v1.9.2