cqp 2 өдөр өмнө
parent
commit
45e0ba95fc

+ 45 - 0
app/Http/Controllers/Api/WxController.php

@@ -0,0 +1,45 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+use App\Service\Wx\WxEmployeeService;
+use Illuminate\Http\Request;
+
+class WxController extends BaseController
+{
+    public function setUser(Request $request)
+    {
+        $service = new WxEmployeeService();
+        list($status, $data) = $service->setUser($request->all());
+
+        if ($status) {
+            return $this->json_return(200, '', $data);
+        } else {
+            return $this->json_return(201, $data);
+        }
+    }
+
+    public function setMobile(Request $request)
+    {
+        $service = new WxEmployeeService();
+        list($status, $data) = $service->setMobile($request->all());
+
+        if ($status) {
+            return $this->json_return(200, '', $data);
+        } else {
+            return $this->json_return(201, $data);
+        }
+    }
+
+    public function getSystemMenuList(Request $request)
+    {
+        $service = new WxEmployeeService();
+        list($status, $data) = $service->getSystemMenuList($request->all());
+
+        if ($status) {
+            return $this->json_return(200, '', $data);
+        } else {
+            return $this->json_return(201, $data);
+        }
+    }
+}

+ 1 - 0
app/Http/Kernel.php

@@ -65,6 +65,7 @@ class Kernel extends HttpKernel
         'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
         'checkLogin' => \App\Http\Middleware\CheckLogin::class,
         'checkCenterLogin' => \App\Http\Middleware\CheckCenterLogin::class,
+        'checkWx' => \App\Http\Middleware\CheckWx::class,
         'OssFileDeal' => \App\Http\Middleware\OssFileDeal::class,
     ];
 

+ 69 - 0
app/Http/Middleware/CheckWx.php

@@ -0,0 +1,69 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use App\Model\Employee;
+use App\Model\SysMenu;
+use App\Model\WxEmployee;
+use App\Service\LoginService;
+use App\Service\Wx\WxEmployeeService;
+use Closure;
+
+class CheckWx
+{
+    /**
+     * Handle an incoming request.
+     * 微信小程序中间件
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Closure  $next
+     * @return mixed
+     */
+    public function handle($request, Closure $next)
+    {
+        $data = $request->all();
+        if (!isset($data['openid'])) return response()->json(['code'=> 202,'msg'=>'缺少openid','data'=>null]);
+        $openid = $data['openid'];
+
+        $tree_type = $data['tree_type'];
+        if (! isset(SysMenu::tree[$tree_type])) return response()->json(['code' => 1,'msg' => '缺少tree_type','data' => null]);
+        $title = SysMenu::tree[$tree_type];
+
+        $appid = config("wx_msg.appid");
+
+        //校验openid是否绑定
+        $employee = new WxEmployee();
+        $employee = $employee->where('openid', $openid)->where('appid', $appid)->first();
+        if (empty($employee)) return response()->json(['code'=> 202,'msg'=>'用户授权信息不存在!','data'=>null]);
+        $employee = $employee->toArray();
+        if (empty($employee['mobile'])) return response()->json(['code'=> 202,'msg'=>'用户手机信息不存在!','data'=>null]);
+        //更新微信小程序表信息
+        $service = new WxEmployeeService();
+        list($status, $msg) = $service->fillEmployeeData($employee);
+        if(! $status) return response()->json(['code'=> 202,'msg'=> $msg,'data'=>null]);
+
+        //校验用户
+        $employee_id = $employee['employee_id'];
+        $checkResult = $service->checkWxUser($employee_id);
+        list($state, $data) = $checkResult;
+        if(! $state) return response()->json(['code'=> 202,'msg'=>$data,'data'=>null]);
+        //账号信息
+        $employee_array = $data;
+
+        //校验是否越权拿菜单数据
+        $bool = LoginService::hasPersonRoleForSysMenuList($employee_id, $tree_type);
+        if(! $bool) return response()->json(['code' => 1,'msg' => '无系统' . $title . '权限','data' => null]);
+
+        //人员公司部门
+        $employee_array = array_merge($employee_array, LoginService::getPersonDepart($employee_id));
+        list($state, $msg) = LoginService::checkCompany($employee_array);
+        if(! $state) return response()->json(['code' => 1,'msg' => $msg,'data' => null]);
+        //人员角色 菜单权限
+        $employee_array = array_merge($employee_array, LoginService::getPersonRoleAndPermissions($employee_array));
+
+        //当前选择的系统菜单
+        $employee_array['select_tree_type'] = $tree_type;
+        $request->userData = $employee_array;
+
+        return $next($request);
+    }
+}

+ 18 - 0
app/Model/WxEmployee.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 微信小程序
+ * Class Unit
+ * @package App\Models
+ */
+class WxEmployee extends Model
+{
+    protected $table = "wx_employee"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+}

+ 10 - 0
app/Providers/RouteServiceProvider.php

@@ -45,6 +45,8 @@ class RouteServiceProvider extends ServiceProvider
         $this->mapApiRoutes();
 
         $this->mapCApiRoutes();
+
+        $this->mapWxRoutes();
     }
 
     /**
@@ -69,4 +71,12 @@ class RouteServiceProvider extends ServiceProvider
             ->namespace($this->namespace)
             ->group(base_path('routes/c_api.php'));
     }
+
+    protected function mapWxRoutes()
+    {
+        Route::prefix('wx')
+            ->middleware('api')
+            ->namespace($this->namespace)
+            ->group(base_path('routes/wx.php'));
+    }
 }

+ 1 - 1
app/Service/LoginService.php

@@ -105,7 +105,7 @@ class LoginService extends Service
         ]];
     }
 
-    private function getPersonRoleForSysMenuList($employee_id) {
+    public function getPersonRoleForSysMenuList($employee_id) {
         $sysMenu = SysMenu::where('del_time',0)
             ->where('type', SysMenu::type_zero)
             ->where('parent_id', 0)

+ 143 - 0
app/Service/Wx/Service.php

@@ -0,0 +1,143 @@
+<?php
+
+namespace App\Service\Wx;
+
+use Illuminate\Support\Facades\Redis;
+use Illuminate\Support\Facades\Storage;
+
+/**
+ * 公用的公共服务
+ * @package App\Models
+ */
+class Service
+{
+
+    public $log;
+    public $total = 0;
+
+    public function __construct()
+    {
+
+    }
+
+    function curlOpen($url, $config = array())
+    {
+        $arr = array('post' => false,'referer' => $url,'cookie' => '', 'useragent' => 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; customie8)', 'timeout' => 100, 'return' => true, 'proxy' => '', 'userpwd' => '', 'nobody' => false,'header'=>array(),'gzip'=>true,'ssl'=>true,'isupfile'=>false,'returnheader'=>false,'request'=>'post');
+        $arr = array_merge($arr, $config);
+        $ch = curl_init();
+
+        curl_setopt($ch, CURLOPT_URL, $url);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, $arr['return']);
+        curl_setopt($ch, CURLOPT_NOBODY, $arr['nobody']);
+        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
+        curl_setopt($ch, CURLOPT_USERAGENT, $arr['useragent']);
+        curl_setopt($ch, CURLOPT_REFERER, $arr['referer']);
+        curl_setopt($ch, CURLOPT_TIMEOUT, $arr['timeout']);
+
+
+        curl_setopt($ch, CURLOPT_HEADER, $arr['returnheader']);//��ȡheader
+        if($arr['gzip']) curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
+        if($arr['ssl'])
+        {
+            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+        }
+        if(!empty($arr['cookie']))
+        {
+            curl_setopt($ch, CURLOPT_COOKIEJAR, $arr['cookie']);
+            curl_setopt($ch, CURLOPT_COOKIEFILE, $arr['cookie']);
+        }
+
+        if(!empty($arr['proxy']))
+        {
+            //curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
+            curl_setopt ($ch, CURLOPT_PROXY, $arr['proxy']);
+            if(!empty($arr['userpwd']))
+            {
+                curl_setopt($ch,CURLOPT_PROXYUSERPWD,$arr['userpwd']);
+            }
+        }
+
+        //ip�Ƚ����⣬�ü�ֵ��ʾ
+        if(!empty($arr['header']['ip']))
+        {
+            array_push($arr['header'],'X-FORWARDED-FOR:'.$arr['header']['ip'],'CLIENT-IP:'.$arr['header']['ip']);
+            unset($arr['header']['ip']);
+        }
+        $arr['header'] = array_filter($arr['header']);
+
+        if(!empty($arr['header']))
+        {
+            curl_setopt($ch, CURLOPT_HTTPHEADER, $arr['header']);
+        }
+
+        if($arr['request'] === 'put'){
+            curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "PUT");
+            curl_setopt($ch, CURLOPT_POSTFIELDS,$arr['post']);
+        }elseif($arr['post'] != false)
+        {
+            curl_setopt($ch, CURLOPT_POST, true);
+            if(is_array($arr['post']) && $arr['isupfile'] === false)
+            {
+                $post = http_build_query($arr['post']);
+            }
+            else
+            {
+                $post = $arr['post'];
+            }
+            curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
+        }
+
+        $result = curl_exec($ch);
+        curl_close($ch);
+
+        return $result;
+    }
+
+    //分页共用
+    public function limit($db, $columns, $request)
+    {
+        $per_page = $request['page_size'] ?? 9999;
+        $page = $request['page_index'] ?? 1;
+        $return = $db->paginate($per_page, $columns, 'page', $page)->toArray();
+
+        $data['total'] = $return['total'];
+        $data['data'] = $return['data'];
+        return $data;
+    }
+
+    //判断是否为空
+    protected function isEmpty($data, $word)
+    {
+        if (isset($data[$word]) && (!empty($data[$word]) || $data[$word] === '0'|| $data[$word] === 0)) return false;
+        return true;
+    }
+
+    //后台端 某些需要限制请求频率的接口
+    public function limitingSendRequestBackg($key,$ttl = 5){
+        if($ttl < 5) $ttl = 5;
+
+        // 使用Redis Facade设置,当键名不存在时才设置成功
+        if (Redis::setnx($key, 1)) {
+            Redis::expire($key, $ttl); //多少秒后过期
+
+            return [true, ''];
+        }
+
+        return [false,'操作频繁, 请在 ' . $ttl . '秒后重试'];
+    }
+
+    public function delStorageFile($old, $new = [], $dir = "upload_files/"){
+        foreach ($old as $value){
+            if(! in_array($value, $new)){
+                $filename_rep = "/api/uploadFiles/";
+                $filename = str_replace($filename_rep, "", $value);
+                $filePath = $dir . $filename;
+                if (Storage::disk('public')->exists($filePath)) {
+                    // 文件存在 进行删除操作
+                    Storage::disk('public')->delete($filePath);
+                }
+            }
+        }
+    }
+}

+ 106 - 0
app/Service/Wx/WxEmployeeService.php

@@ -0,0 +1,106 @@
+<?php
+
+namespace App\Service\Wx;
+
+use App\Model\Employee;
+use App\Model\WxEmployee;
+use App\Service\LoginService;
+
+class WxEmployeeService extends Service
+{
+    public function setUser($data){
+        if(empty($data['code'])) return [false, '用户登录凭证(code)不能为空'];
+        $code = $data['code'];
+        $service = new WxService();
+        list($status,$openid) = $service->getOpenid($code);
+        if(!$status) return [false,$openid];
+
+        $user = WxEmployee::where('openid',$openid)->where('appid',$service->appid)->first();
+        if(empty($user)) {
+            $user = new WxEmployee();
+            $user->mobile = '';
+            $user->openid = $openid;
+            $user->appid = $service->appid;
+            $user->save();
+
+            $state = 0;
+        }else{
+            $state = 1;
+            if(empty($user->mobile)){
+                $state = 0;
+            }else{
+                $bool = Employee::where('del_time',0)
+                    ->where('mobile',$user->mobile)
+                    ->where('is_wx_admin', Employee::IS_WX_ADMIN_ONE)
+                    ->exists();
+                if(! $bool) $state = 0;
+            }
+        }
+
+        return [true,['openid'=>$openid, 'state'=> $state]];
+    }
+
+    public function setMobile($data){
+        if(empty($data['code'])) return [false, '用户登录凭证(code)不能为空'];
+        if(empty($data['openid'])) return [false, 'openID不能为空'];
+        $code = $data['code'];
+        $openid = $data['openid'];
+        $service = new WxService();
+        list($status,$mobile) = $service->getMobile($code);
+        if(!$status) return [false,$mobile];
+
+        $user = WxEmployee::where('openid',$openid)->where('appid',$service->appid)->first();
+        if(empty($user)) return [false,'openID在系统中暂无记录'];
+
+        $user->mobile = $mobile;
+        $user->save();
+
+        return [true, ['mobile' => $mobile]];
+    }
+
+    public static function checkWxUser($userId){
+        $res = Employee::where('id', $userId)
+            ->where('del_time',0)
+            ->first();
+        if(empty($res)) return [false, '该系统账号不存在'];
+        $res = $res->toArray();
+        if(! $res['is_wx_admin']) return [false, '该系统账号不允许登录微信小程序'];
+
+        return [true, $res];
+    }
+
+    public function getSystemMenuList($data){
+        if(empty($data['openid'])) return [false,'openid不能为空!'];
+        $employee = WxEmployee::where('openid',$data['openid'])->first();
+        if(empty($employee)) return [false,'未找到用户信息'];
+        $employee = $employee->toArray();
+        list($status, $msg) = $this->fillEmployeeData($employee);
+        if(! $status) return [false, $msg];
+
+        //获取人员所有的所有的顶级菜单
+        $sysMenu = (new LoginService())->getPersonRoleForSysMenuList($employee['id']);
+        if(empty($sysMenu)) return [false, '账户未设置菜单功能'];
+
+        return [true, $sysMenu];
+    }
+
+    // 根据微信小程序表记录的手机号,查找唯一对应的账号且账号允许登录微信小程序后台,最后更新到微信小程序表中
+    public function fillEmployeeData(&$employee){
+        if (empty($employee['employee_id'])) {
+            //找到对应的账号
+            $emp = Employee::where('del_time',0)
+                ->where('mobile',$employee['mobile'])
+                ->where('is_wx_admin', Employee::IS_WX_ADMIN_ONE)
+                ->select('id')
+                ->first();
+            if(empty($emp)) return [false, '用户手机信息未匹配到系统账号'];
+            $emp = $emp->toArray();
+            $employee['employee_id'] = $emp['id'];
+
+            //更新到微信小程序中
+            WxEmployee::where('id',$employee['id'])->update(['employee_id' => $emp['id']]);
+        }
+
+        return [true, ''];
+    }
+}

+ 63 - 0
app/Service/Wx/WxService.php

@@ -0,0 +1,63 @@
+<?php
+
+namespace App\Service\Wx;
+
+use Illuminate\Support\Facades\Redis;
+
+class WxService extends Service
+{
+    public $appid = '';
+    public $secret = '';
+
+    public function __construct()
+    {
+        $this->appid = config("wx_msg.appid");
+        $this->secret = config("wx_msg.appSecret");
+    }
+
+    public function getOpenid($code){
+        $appid = $this->appid;
+        $secret = $this->secret;
+        $url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$secret.'&js_code='.$code.'&grant_type=authorization_code';
+
+        list($status,$res) = $this->wx_return($url);
+        if($status) return [true,$res['openid']];
+        else return [false,$res];
+    }
+
+    public function getToken(){
+        $token_key = $this->appid.'_wx_token';
+        $token = Redis::get($token_key);
+        if(!empty($token)) return [true,$token];
+        $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->appid.'&secret='.$this->secret;
+        list($status,$res) = $this->wx_return($url);
+        if($status) {
+            Redis::setex($token_key,7100,$res['access_token']);
+            return [true,$res['access_token']];
+        }
+        else return [false,$res];
+    }
+
+    public function getMobile($code){
+        list($status,$token) = $this->getToken();
+        if(! $status) return [false, $token];
+        $url = 'https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token='.$token;
+        $post = [
+            'post'=>json_encode([
+                'code' => $code,
+            ]),
+        ];
+        $post['header'][] = "Content-Type:application/json";
+        list($status,$res) = $this->wx_return($url,$post);
+        if($status) return [true,$res['phone_info']['phoneNumber']];
+        else return [false,$res];
+    }
+
+    private function wx_return($url,$data=[]){
+        $res = $this->curlOpen($url,$data);
+        $res = json_decode($res,true);
+        if(isset($res['errcode'])&&$res['errcode'] !== 0) return [false,$res['errmsg']];
+
+        return [true,$res];
+    }
+}

+ 6 - 0
config/wx_msg.php

@@ -0,0 +1,6 @@
+<?php
+
+return [
+    'appid' => env('WX_APPID'), // 小程序 appid
+    'appSecret' => env('WX_APPSECRET'), // 小程序 密码
+];

+ 272 - 0
routes/wx.php

@@ -0,0 +1,272 @@
+<?php
+
+use Illuminate\Http\Request;
+/*
+|--------------------------------------------------------------------------
+| API Routes
+|--------------------------------------------------------------------------
+|
+| Here is where you can register API routes for your application. These
+| routes are loaded by the RouteServiceProvider within a group which
+| is assigned the "api" middleware group. Enjoy building your API!
+|
+*/
+
+Route::any('wxSetUser', 'Api\WxController@setUser');
+Route::any('wxSetMobile', 'Api\WxController@setMobile');
+Route::any('getSystemMenuList', 'Api\WxController@getSystemMenuList'); //获取进入的系统 工时或项目管理
+Route::group(['middleware'=> ['checkWx']],function ($route){
+    //文件上传统一方法
+    $route->any('uploadFile', 'Api\FileUploadController@uploadFile');
+    //获取默认表头
+    $route->any('getTableHead','Api\TableHeadController@tableHeadGet');
+    //设置表头
+    $route->any('setTableHead','Api\TableHeadController@tableHeadAdd');
+    //获取下载模板
+    $route->any('getTableTitleXls','Api\ImportController@getTableTitleXls');
+    //菜单
+    $route->any('menuList', 'Api\SysMenuController@menuList');
+    //导入
+    $route->any('importAll','Api\ImportController@importAll');
+    //导出统一方法
+    $route->any('exportFile', 'Api\ExportFileController@exportFile');
+
+    $route->any('menuAdd', 'Api\SysMenuController@add');
+    $route->any('menuEdit', 'Api\SysMenuController@edit');
+    $route->any('menuDel', 'Api\SysMenuController@del');
+    $route->any('menuMove', 'Api\SysMenuController@menuMove');
+
+    $route->any('employeeManageAdd', 'Api\EmployeeController@employeeManageAdd');
+    $route->any('employeeManageEdit', 'Api\EmployeeController@employeeManageEdit');
+
+    //用户表头自定义设置相关
+    $route->any('customFieldList', 'Api\CustomFieldSettingController@list');
+    $route->any('customFieldEdit', 'Api\CustomFieldSettingController@edit');
+    $route->any('customFieldAdd', 'Api\CustomFieldSettingController@add');
+    $route->any('customFieldDel', 'Api\CustomFieldSettingController@del');
+    $route->any('customFieldDetail', 'Api\CustomFieldSettingController@detail');
+
+    //人员
+    $route->any('employeeAdd', 'Api\EmployeeController@employeeAdd')->middleware('OssFileDeal');
+    $route->any('employeeEdit', 'Api\EmployeeController@employeeEdit')->middleware('OssFileDeal');
+    $route->any('employeeEditOther', 'Api\EmployeeController@employeeEditOther');
+    $route->any('employeeDel', 'Api\EmployeeController@employeeDel')->middleware('OssFileDeal');
+    $route->any('employeeDetail', 'Api\EmployeeController@employeeDetail');
+    $route->any('employeeList', 'Api\EmployeeController@employeeList');
+
+    $route->any('employeeDepart', 'Api\EmployeeController@employeeDepart');
+    $route->any('employeeEditImg', 'Api\EmployeeController@employeeEditImg')->middleware('OssFileDeal');
+    $route->any('getEmployeeImg', 'Api\EmployeeController@getEmployeeImg');
+
+    //公司设置
+    $route->any('companySet', 'Api\EmployeeController@companySet');
+    $route->any('companyDetail', 'Api\EmployeeController@companyDetail');
+    //公司工作时段设置
+    $route->any('companyWorkArrangeSet', 'Api\EmployeeController@companyWorkArrangeSet');
+    $route->any('companyWorkArrangeDetail', 'Api\EmployeeController@companyWorkArrangeDetail');
+
+    //部门
+    $route->any('departAdd', 'Api\EmployeeController@departAdd');
+    $route->any('departEdit', 'Api\EmployeeController@departEdit');
+    $route->any('departDel', 'Api\EmployeeController@departDel');
+    $route->any('departList', 'Api\EmployeeController@departList');
+
+    //角色
+    $route->any('roleAdd', 'Api\EmployeeController@roleAdd');
+    $route->any('roleEdit', 'Api\EmployeeController@roleEdit');
+    $route->any('roleDel', 'Api\EmployeeController@roleDel');
+    $route->any('roleList', 'Api\EmployeeController@roleList');
+    $route->any('roleDetail', 'Api\EmployeeController@roleDetail');
+    $route->any('roleMenu', 'Api\EmployeeController@roleMenu');
+
+    //设备
+    $route->any('deviceList', 'Api\DeviceController@deviceList');
+    $route->any('deviceEdit', 'Api\DeviceController@deviceEdit');
+    $route->any('deviceAdd', 'Api\DeviceController@deviceAdd');
+    $route->any('deviceDel', 'Api\DeviceController@deviceDel');
+    $route->any('deviceDetail', 'Api\DeviceController@deviceDetail');
+
+    // 项目 任务 节点 都可以用的 文件上传 文件删除 更改交付物状态
+    $route->any('itemFileUpLoad', 'Api\ItemController@itemFileUpLoad');
+    $route->any('itemFileUpDelete', 'Api\ItemController@itemFileUpDelete');
+    $route->any('itemFileIsDelivery', 'Api\ItemController@itemFileIsDelivery');
+
+    //项目
+    $route->any('itemList', 'Api\ItemController@itemList');
+    $route->any('itemEdit', 'Api\ItemController@itemEdit');
+    $route->any('itemAdd', 'Api\ItemController@itemAdd');
+    $route->any('itemDel', 'Api\ItemController@itemDel');
+    $route->any('itemDetail', 'Api\ItemController@itemDetail');
+    $route->any('itemDetailBoard', 'Api\ItemController@itemDetailBoard');
+    $route->any('itemFinish', 'Api\ItemController@itemFinish');
+
+    //项目节点
+    $route->any('itemNodeList', 'Api\ItemController@itemNodeList');
+    $route->any('itemNodeEdit', 'Api\ItemController@itemNodeEdit');
+    $route->any('itemNodeAdd', 'Api\ItemController@itemNodeAdd');
+    $route->any('itemNodeDel', 'Api\ItemController@itemNodeDel');
+    $route->any('itemNodeDetail', 'Api\ItemController@itemNodeDetail');
+    $route->any('itemNodeDetailBoard', 'Api\ItemController@itemNodeDetailBoard');
+    $route->any('itemNodeFinish', 'Api\ItemController@itemNodeFinish');
+
+    //项目节点任务
+    $route->any('itemNodeMissionListBySearch', 'Api\ItemController@itemNodeMissionListBySearch'); //不分页 带 项目 节点查询
+    $route->any('itemNodeMissionDetailBoard', 'Api\ItemController@itemNodeMissionDetailBoard');
+    $route->any('itemNodeMissionEdit', 'Api\ItemController@itemNodeMissionEdit');
+    $route->any('itemNodeMissionAdd', 'Api\ItemController@itemNodeMissionAdd');
+    $route->any('itemNodeMissionDel', 'Api\ItemController@itemNodeMissionDel');
+    $route->any('itemNodeMissionDetail', 'Api\ItemController@itemNodeMissionDetail');
+    $route->any('itemNodeMissionFinish', 'Api\ItemController@itemNodeMissionFinish'); // 完结
+    $route->any('itemNodeMissionUpdateProgress', 'Api\ItemController@itemNodeMissionUpdateProgress'); // 更新任务进展
+    $route->any('itemNodeMissionUpdateProgressContent', 'Api\ItemController@itemNodeMissionUpdateProgressContent'); // 更新任务进展人员日报
+    $route->any('itemNodeMissionBatchUpdateProgressContent', 'Api\ItemController@itemNodeMissionBatchUpdateProgressContent'); // 批量操作任务进展人员日报
+    $route->any('itemNodeMissionContentDelete', 'Api\ItemController@itemNodeMissionContentDelete'); // 批量删除任务进展人员日报
+    $route->any('itemNodeMissionUpdateState', 'Api\ItemController@itemNodeMissionUpdateState'); // 拖拽更新任务状态
+    $route->any('itemNodeMissionList', 'Api\ItemController@itemNodeMissionList');
+    $route->any('itemGannetList', 'Api\ItemController@itemGannetList');
+    $route->any('itemGannetGetSonData', 'Api\ItemController@itemGannetGetSonData');
+    $route->any('itemMissionProgressList', 'Api\ItemController@itemMissionProgressList');
+
+    //外部获取进展
+    $route->any('itemMissionProgressBoard', 'Api\ItemController@itemMissionProgressBoard');
+    //外部链接登录 更新自己的进展
+    $route->any('itemNodeMissionUpdateProgressContentOutSide', 'Api\ItemController@itemNodeMissionUpdateProgressContentOutSide');
+
+    //分享任务链接
+    $route->any('shareAdd', 'Api\ItemController@shareAdd');
+    $route->any('shareEdit', 'Api\ItemController@shareEdit');
+    $route->any('shareList', 'Api\ItemController@shareList');
+    $route->any('shareDetail', 'Api\ItemController@shareDetail');
+    $route->any('shareCancel', 'Api\ItemController@shareCancel');
+
+    //标签管理
+    $route->any('tagList', 'Api\TagController@tagList');
+    $route->any('tagEdit', 'Api\TagController@tagEdit');
+    $route->any('tagAdd', 'Api\TagController@tagAdd');
+    $route->any('tagDel', 'Api\TagController@tagDel');
+    $route->any('tagDetail', 'Api\TagController@tagDetail');
+
+    //团队
+    $route->any('teamList', 'Api\TeamController@teamList');
+    $route->any('teamEdit', 'Api\TeamController@teamEdit');
+    $route->any('teamAdd', 'Api\TeamController@teamAdd');
+    $route->any('teamDel', 'Api\TeamController@teamDel');
+    $route->any('teamDetail', 'Api\TeamController@teamDetail');
+
+    //审批流模板
+    $route->any('workFlowList', 'Api\WorkFlowController@workFlowList');
+    $route->any('workFlowEdit', 'Api\WorkFlowController@workFlowEdit');
+    $route->any('workFlowAdd', 'Api\WorkFlowController@workFlowAdd');
+    $route->any('workFlowDel', 'Api\WorkFlowController@workFlowDel');
+    $route->any('workFlowDetail', 'Api\WorkFlowController@workFlowDetail');
+
+    //待我审核
+    $route->any('getMyPendingApprovals', 'Api\WorkFlowController@getMyPendingApprovals');
+    //待我审核时查看详情
+    $route->any('getMyPendingApprovalsDetail', 'Api\WorkFlowController@getMyPendingApprovalsDetail');
+    //已完成
+    $route->any('getMyHandledApprovals', 'Api\WorkFlowController@getMyHandledApprovals');
+    //审核接口
+    $route->any('approval', 'Api\WorkFlowController@approval');
+
+    //费用类型
+    $route->any('feeAdd', 'Api\FeeController@feeAdd');
+    $route->any('feeEdit', 'Api\FeeController@feeEdit');
+    $route->any('feeDel', 'Api\FeeController@feeDel');
+    $route->any('feeList', 'Api\FeeController@feeList');
+
+    //人员月度研发工时单
+    $route->any('monthlyPwOrderList', 'Api\PersonWorkController@monthlyPwOrderList');
+    $route->any('monthlyPwOrderEdit', 'Api\PersonWorkController@monthlyPwOrderEdit');
+    $route->any('monthlyPwOrderAdd', 'Api\PersonWorkController@monthlyPwOrderAdd');
+    $route->any('monthlyPwOrderDel', 'Api\PersonWorkController@monthlyPwOrderDel');
+    $route->any('monthlyPwOrderDetail', 'Api\PersonWorkController@monthlyPwOrderDetail');
+
+    //设备月度研发工时单
+    $route->any('monthlyDwOrderList', 'Api\DeviceWorkController@monthlyDwOrderList');
+    $route->any('monthlyDwOrderEdit', 'Api\DeviceWorkController@monthlyDwOrderEdit');
+    $route->any('monthlyDwOrderAdd', 'Api\DeviceWorkController@monthlyDwOrderAdd');
+    $route->any('monthlyDwOrderDel', 'Api\DeviceWorkController@monthlyDwOrderDel');
+    $route->any('monthlyDwOrderDetail', 'Api\DeviceWorkController@monthlyDwOrderDetail');
+
+    //人员月度工资单
+    $route->any('monthlyPsOrderList', 'Api\PersonSalaryController@monthlyPsOrderList');
+    $route->any('monthlyPsOrderEdit', 'Api\PersonSalaryController@monthlyPsOrderEdit')->name('use_range_check');
+    $route->any('monthlyPsOrderAdd', 'Api\PersonSalaryController@monthlyPsOrderAdd')->name('use_range_check');
+    $route->any('monthlyPsOrderDel', 'Api\PersonSalaryController@monthlyPsOrderDel');
+    $route->any('monthlyPsOrderDetail', 'Api\PersonSalaryController@monthlyPsOrderDetail');
+
+    //设备月度折旧单
+    $route->any('monthlyDdOrderList', 'Api\DeviceDepreciationController@monthlyDdOrderList');
+    $route->any('monthlyDdOrderEdit', 'Api\DeviceDepreciationController@monthlyDdOrderEdit')->name('use_range_check');
+    $route->any('monthlyDdOrderAdd', 'Api\DeviceDepreciationController@monthlyDdOrderAdd')->name('use_range_check');
+    $route->any('monthlyDdOrderDel', 'Api\DeviceDepreciationController@monthlyDdOrderDel');
+    $route->any('monthlyDdOrderDetail', 'Api\DeviceDepreciationController@monthlyDdOrderDetail');
+
+    //规则配置
+    $route->any('ruleSetList', 'Api\RuleSetController@ruleSetList');
+    $route->any('ruleSetEdit', 'Api\RuleSetController@ruleSetEdit')->name('use_range_check');
+    $route->any('ruleSetAdd', 'Api\RuleSetController@ruleSetAdd')->name('use_range_check');
+    $route->any('ruleSetDel', 'Api\RuleSetController@ruleSetDel');
+    $route->any('ruleSetDetail', 'Api\RuleSetController@ruleSetDetail');
+    $route->any('ruleSetCreate', 'Api\RuleSetController@ruleSetCreate');
+
+    //人员日工时单
+    $route->any('dailyPwOrderList', 'Api\PersonWorkController@dailyPwOrderList');
+    $route->any('dailyPwOrderEdit', 'Api\PersonWorkController@dailyPwOrderEdit')->name('use_range_check');
+    $route->any('dailyPwOrderAdd', 'Api\PersonWorkController@dailyPwOrderAdd')->name('use_range_check');
+    $route->any('dailyPwOrderDel', 'Api\PersonWorkController@dailyPwOrderDel');
+    $route->any('dailyPwOrderDetail', 'Api\PersonWorkController@dailyPwOrderDetail');
+    //根据月工时生成
+    $route->any('dailyPwOrderCreate', 'Api\PersonWorkController@dailyPwOrderCreate');
+    $route->any('dailyPwOrderPreview', 'Api\PersonWorkController@dailyPwOrderPreview');
+    $route->any('dailyPwOrderSave', 'Api\PersonWorkController@dailyPwOrderSave');
+
+    //设备日工时单
+    $route->any('dailyDwOrderList', 'Api\DeviceWorkController@dailyDwOrderList');
+    $route->any('dailyDwOrderEdit', 'Api\DeviceWorkController@dailyDwOrderEdit')->name('use_range_check');
+    $route->any('dailyDwOrderAdd', 'Api\DeviceWorkController@dailyDwOrderAdd')->name('use_range_check');
+    $route->any('dailyDwOrderDel', 'Api\DeviceWorkController@dailyDwOrderDel');
+    $route->any('dailyDwOrderDetail', 'Api\DeviceWorkController@dailyDwOrderDetail');
+    //根据月工时生成
+    $route->any('dailyDwOrderCreate', 'Api\DeviceWorkController@dailyDwOrderCreate');
+    $route->any('dailyDwOrderPreview', 'Api\DeviceWorkController@dailyDwOrderPreview');
+    $route->any('dailyDwOrderSave', 'Api\DeviceWorkController@dailyDwOrderSave');
+
+    //日历设置
+    $route->any('calendarList', 'Api\CalendarController@calendarList');
+    $route->any('calendarEdit', 'Api\CalendarController@calendarEdit')->name('use_range_check');
+    $route->any('calendarAdd', 'Api\CalendarController@calendarAdd')->name('use_range_check');
+    $route->any('calendarDel', 'Api\CalendarController@calendarDel');
+    $route->any('calendarDetail', 'Api\CalendarController@calendarDetail');
+
+    //归档
+    $route->any('archiveList', 'Api\ArchiveController@archiveList');
+    $route->any('archiveAdd', 'Api\ArchiveController@archiveAdd');
+    $route->any('archiveDel', 'Api\ArchiveController@archiveDel');
+
+    //请假单 加班单
+    $route->any('pLeaveOverOrderList', 'Api\PLeaveOverController@pLeaveOverList');
+    $route->any('pLeaveOverEdit', 'Api\PLeaveOverController@pLeaveOverEdit')->name('use_range_check');
+    $route->any('pLeaveOverAdd', 'Api\PLeaveOverController@pLeaveOverAdd')->name('use_range_check');
+    $route->any('pLeaveOverDel', 'Api\PLeaveOverController@pLeaveOverDel');
+    $route->any('pLeaveOverDetail', 'Api\PLeaveOverController@pLeaveOverDetail');
+
+    //获取默认月考勤数据 人和设备
+    $route->any('isSetMonthCalendar', 'Api\RuleSetController@isSetMonthCalendar');
+
+    //费用报销单
+    $route->any('expenseClaimsList', 'Api\ExpenseClaimsController@expenseClaimsList');
+    $route->any('expenseClaimsAdd', 'Api\ExpenseClaimsController@expenseClaimsAdd')->middleware('OssFileDeal')->name('use_range_check');
+    $route->any('expenseClaimsEdit', 'Api\ExpenseClaimsController@expenseClaimsEdit')->middleware('OssFileDeal')->name('use_range_check');
+    $route->any('expenseClaimsDel', 'Api\ExpenseClaimsController@expenseClaimsDel')->middleware('OssFileDeal');
+    $route->any('expenseClaimsDetail', 'Api\ExpenseClaimsController@expenseClaimsDetail');
+
+
+    //研发支出辅助帐
+    $route->any('auxiliaryAccountList', 'Api\AuxiliaryAccountController@auxiliaryAccountList');
+    $route->any('auxiliaryAccountAdd', 'Api\AuxiliaryAccountController@auxiliaryAccountAdd');
+    $route->any('auxiliaryAccountEdit', 'Api\AuxiliaryAccountController@auxiliaryAccountEdit');
+    $route->any('auxiliaryAccountDel', 'Api\AuxiliaryAccountController@auxiliaryAccountDel');
+    $route->any('auxiliaryAccountDetail', 'Api\AuxiliaryAccountController@auxiliaryAccountDetail');
+});