【最新版】沃德代駕源碼全開源+前端uniapp

一.系統介紹

基于ThinkPHP+Uniapp開發的代駕軟件。系統源碼全開源,代駕軟件的主要功能包括預約代駕、在線搶單、一鍵定位、在線支付、車主登記和代駕司機實名登記等?。用戶可以通過小程序預約代駕服務,系統會估算代駕價格并推送附近代駕司機供用戶選擇;司機接到訂單后,會自動生成路線,方便快速找到車主;服務結束后,用戶可以直接在線支付。

二.搭建環境教程

系統環境:CentOS、

運行環境:寶塔?Linux

網站環境:Nginx 1.21 + MySQL 5.7.46 + PHP-74

常見插件:fileinfo ; redis

系統搭建測試(圖片僅供參考無運營)

系統源碼全開源,可二次開發。后端common/api文件代碼:

<?phpnamespace app\common\controller;use app\common\library\Auth;
use think\Config;
use think\exception\HttpResponseException;
use think\exception\ValidateException;
use think\Hook;
use think\Lang;
use think\Loader;
use think\Request;
use think\Response;
use think\Route;
use think\Validate;/*** API控制器基類*/
class Api
{/*** @var Request Request 實例*/protected $request;/*** @var bool 驗證失敗是否拋出異常*/protected $failException = false;/*** @var bool 是否批量驗證*/protected $batchValidate = false;/*** @var array 前置操作方法列表*/protected $beforeActionList = [];/*** 無需登錄的方法,同時也就不需要鑒權了* @var array*/protected $noNeedLogin = [];/*** 無需鑒權的方法,但需要登錄* @var array*/protected $noNeedRight = [];/*** 權限Auth* @var Auth*/protected $auth = null;/*** 默認響應輸出類型,支持json/xml* @var string*/protected $responseType = 'json';/*** 構造方法* @access public* @param Request $request Request 對象*/public function __construct(Request $request = null){$this->request = is_null($request) ? Request::instance() : $request;// 控制器初始化$this->_initialize();// 前置操作方法if ($this->beforeActionList) {foreach ($this->beforeActionList as $method => $options) {is_numeric($method) ?$this->beforeAction($options) :$this->beforeAction($method, $options);}}}/*** 初始化操作* @access protected*/protected function _initialize(){//跨域請求檢測check_cors_request();// 檢測IP是否允許check_ip_allowed();//移除HTML標簽$this->request->filter('trim,strip_tags,htmlspecialchars');$this->auth = Auth::instance();$modulename = $this->request->module();$controllername = Loader::parseName($this->request->controller());$actionname = strtolower($this->request->action());// token$token = $this->request->server('HTTP_TOKEN', $this->request->request('token', \think\Cookie::get('token')));$path = str_replace('.', '/', $controllername) . '/' . $actionname;// 設置當前請求的URI$this->auth->setRequestUri($path);// 檢測是否需要驗證登錄if (!$this->auth->match($this->noNeedLogin)) {//初始化$this->auth->init($token);//檢測是否登錄if (!$this->auth->isLogin()) {$this->error(__('Please login first'), null, 401);}// 判斷是否需要驗證權限if (!$this->auth->match($this->noNeedRight)) {// 判斷控制器和方法判斷是否有對應權限if (!$this->auth->check($path)) {$this->error(__('You have no permission'), null, 403);}}} else {// 如果有傳遞token才驗證是否登錄狀態if ($token) {$this->auth->init($token);}}$upload = \app\common\model\Config::upload();// 上傳信息配置后Hook::listen("upload_config_init", $upload);Config::set('upload', array_merge(Config::get('upload'), $upload));// 加載當前控制器語言包$this->loadlang($controllername);}/*** 加載語言文件* @param string $name*/protected function loadlang($name){$name = Loader::parseName($name);$name = preg_match("/^([a-zA-Z0-9_\.\/]+)\$/i", $name) ? $name : 'index';$lang = $this->request->langset();$lang = preg_match("/^([a-zA-Z\-_]{2,10})\$/i", $lang) ? $lang : 'zh-cn';Lang::load(APP_PATH . $this->request->module() . '/lang/' . $lang . '/' . str_replace('.', '/', $name) . '.php');}/*** 操作成功返回的數據* @param string $msg    提示信息* @param mixed  $data   要返回的數據* @param int    $code   錯誤碼,默認為1* @param string $type   輸出類型* @param array  $header 發送的 Header 信息*/protected function success($msg = '', $data = null, $code = 1, $type = null, array $header = []){$this->result($msg, $data, $code, $type, $header);}/*** 操作失敗返回的數據* @param string $msg    提示信息* @param mixed  $data   要返回的數據* @param int    $code   錯誤碼,默認為0* @param string $type   輸出類型* @param array  $header 發送的 Header 信息*/protected function error($msg = '', $data = null, $code = 0, $type = null, array $header = []){$this->result($msg, $data, $code, $type, $header);}/*** 返回封裝后的 API 數據到客戶端* @access protected* @param mixed  $msg    提示信息* @param mixed  $data   要返回的數據* @param int    $code   錯誤碼,默認為0* @param string $type   輸出類型,支持json/xml/jsonp* @param array  $header 發送的 Header 信息* @return void* @throws HttpResponseException*/protected function result($msg, $data = null, $code = 0, $type = null, array $header = []){$result = ['code' => $code,'msg'  => $msg,'time' => Request::instance()->server('REQUEST_TIME'),'data' => $data,];// 如果未設置類型則使用默認類型判斷$type = $type ? : $this->responseType;if (isset($header['statuscode'])) {$code = $header['statuscode'];unset($header['statuscode']);} else {//未設置狀態碼,根據code值判斷$code = $code >= 1000 || $code < 200 ? 200 : $code;}$response = Response::create($result, $type, $code)->header($header);throw new HttpResponseException($response);}/*** 前置操作* @access protected* @param string $method  前置操作方法名* @param array  $options 調用參數 ['only'=>[...]] 或者 ['except'=>[...]]* @return void*/protected function beforeAction($method, $options = []){if (isset($options['only'])) {if (is_string($options['only'])) {$options['only'] = explode(',', $options['only']);}if (!in_array($this->request->action(), $options['only'])) {return;}} elseif (isset($options['except'])) {if (is_string($options['except'])) {$options['except'] = explode(',', $options['except']);}if (in_array($this->request->action(), $options['except'])) {return;}}call_user_func([$this, $method]);}/*** 設置驗證失敗后是否拋出異常* @access protected* @param bool $fail 是否拋出異常* @return $this*/protected function validateFailException($fail = true){$this->failException = $fail;return $this;}/*** 驗證數據* @access protected* @param array        $data     數據* @param string|array $validate 驗證器名或者驗證規則數組* @param array        $message  提示信息* @param bool         $batch    是否批量驗證* @param mixed        $callback 回調方法(閉包)* @return array|string|true* @throws ValidateException*/protected function validate($data, $validate, $message = [], $batch = false, $callback = null){if (is_array($validate)) {$v = Loader::validate();$v->rule($validate);} else {// 支持場景if (strpos($validate, '.')) {list($validate, $scene) = explode('.', $validate);}$v = Loader::validate($validate);!empty($scene) && $v->scene($scene);}// 批量驗證if ($batch || $this->batchValidate) {$v->batch(true);}// 設置錯誤信息if (is_array($message)) {$v->message($message);}// 使用回調驗證if ($callback && is_callable($callback)) {call_user_func_array($callback, [$v, &$data]);}if (!$v->check($data)) {if ($this->failException) {throw new ValidateException($v->getError());}return $v->getError();}return true;}/*** 刷新Token*/protected function token(){$token = $this->request->param('__token__');//驗證Tokenif (!Validate::make()->check(['__token__' => $token], ['__token__' => 'require|token'])) {$this->error(__('Token verification error'), ['__token__' => $this->request->token()]);}//刷新Token$this->request->token();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/903124.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903124.shtml
英文地址,請注明出處:http://en.pswp.cn/news/903124.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

react的 Fiber 節點的鏈表存儲

在React Fiber架構中&#xff0c;Fiber節點的鏈表存儲是一種重要的數據結構組織方式&#xff0c;用于管理和遍歷Fiber節點。以下是關于Fiber節點鏈表存儲的詳細介紹&#xff1a; 鏈表結構 單鏈表&#xff1a;React Fiber節點通過next指針形成單鏈表結構。每個Fiber節點都有一…

Kafka + Kafka-UI

文章目錄 前言&#x1f433; 一、使用純 Kafka Kafka-UI &#xff08;無 Zookeeper&#xff09;Docker 配置&#x1f680; 啟動步驟? 服務啟動后地址&#x1f525; 注意事項&#xff08;使用 Kraft&#xff09;? NestJS Kafka 連接不變&#x1f9e0; 額外補充&#x1f4e6; …

AI聲像融合守護幼兒安全——打罵/異常聲音報警系統的智慧防護

幼兒園是孩子們快樂成長的搖籃&#xff0c;但打罵、哭鬧或尖叫等異常事件可能打破這份寧靜&#xff0c;威脅幼兒的身心安全。打罵/異常聲音報警系統&#xff0c;依托尖端的AI聲像融合技術&#xff0c;結合語音識別、情緒分析與視頻行為檢測&#xff0c;為幼兒園筑起一道智能安全…

Qt網絡數據解析方法總結

在Qt中解析網絡數據通常涉及接收原始字節流&#xff0c;并將其轉換為有意義的應用層數據。以下是詳細步驟和示例&#xff1a; 1. 網絡數據接收 使用QTcpSocket或QUdpSocket接收數據&#xff0c;通過readyRead()信號觸發讀取&#xff1a; // 創建TCP Socket并連接信號 QTcpSo…

unity編輯器的json驗證及格式化

UNITY編輯器的json格式化和驗證工具資源-CSDN文庫https://download.csdn.net/download/qq_38655924/90676188?spm1001.2014.3001.5501 反復去別的網站驗證json太麻煩了 用這個工具能方便點 # Unity JSON工具 這是一個Unity編輯器擴展&#xff0c;用于驗證、格式化和壓縮JSO…

學習筆記:Qlib 量化投資平臺框架 — FIRST STEPS

學習筆記&#xff1a;Qlib 量化投資平臺框架 — FIRST STEPS Qlib 是微軟亞洲研究院開源的一個面向人工智能的量化投資平臺&#xff0c;旨在實現人工智能技術在量化投資中的潛力&#xff0c;賦能研究&#xff0c;并創造價值&#xff0c;從探索想法到實施生產。Qlib 支持多種機器…

操作系統:計算機世界的基石與演進

一、操作系統的本質與核心功能 操作系統如同計算機系統的"總管家"&#xff0c;在硬件與應用之間架起關鍵橋梁。從不同視角觀察&#xff0c;其核心功能呈現多維價值&#xff1a; 硬件視角的雙重使命&#xff1a; 硬件管理者&#xff1a;通過內存管理、進程調度和設…

基于單片機的溫濕度采集系統(論文+源碼)

2.1系統的功能 本系統的研制主要包括以下幾項功能&#xff1a; (1)溫度檢測功能&#xff1a;對所處環境的溫度進行檢測&#xff1b; (2)濕度檢測功能&#xff1a;對所處環境的濕度進行檢測&#xff1b; (3)加熱和制冷功能&#xff1a;可以完成加熱和制冷功能。 (4)加濕和除…

webrtc使用

demo https://www.webrtc-experiment.com/ github開源demo https://github.com/muaz-khan/WebRTC-Experiment.git ws傳遞webrtc信令,本機不需要stun服務器,遠端電腦需要ice服務器建立peer連接 const WebSocket = require(ws); const express =

【數據可視化-25】時尚零售銷售數據集的機器學習可視化分析

?? 博主簡介:曾任某智慧城市類企業算法總監,目前在美國市場的物流公司從事高級算法工程師一職,深耕人工智能領域,精通python數據挖掘、可視化、機器學習等,發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN人工智能領域的優質創作者,提供AI相關的技術咨詢、項目開發和個…

Python Cookbook-6.11 緩存環的實現

任務 你想定義一個固定尺寸的緩存&#xff0c;當它被填滿時&#xff0c;新加入的元素會覆蓋第一個(最老的)元素。這種數據結構在存儲日志和歷史信息時非常有用。 解決方案 當緩存填滿時&#xff0c;本節解決方案及時地修改了緩存對象&#xff0c;使其從未填滿的緩存類變成了…

OpenCv高階(九)——背景建模

目錄 一、背景建模的核心目標與核心挑戰 1. 核心目標 2. 核心挑戰 ?二、背景建模模型 1、幀差法原理 2. 概率模型&#xff08;Parametric Models&#xff09; &#xff08;1&#xff09;高斯混合模型&#xff08;Gaussian Mixture Model, GMM&#xff09; &#xff08;…

小重構,大收益!技術重構實踐:如何優雅升級老舊接口

重構格言&#xff1a;"優秀系統不是設計出來的&#xff0c;而是通過持續重構演進而來的。" —— Martin Fowler《重構&#xff1a;改善既有代碼的設計》 希望本文能為您的重構之旅提供指引&#xff0c;讓老舊系統煥發新生&#xff01; 一、背景&#xff1a;一個“穩定…

OSPF中DR/BDR的選舉

OSPF 開放式最短路徑優先協議-CSDN博客 選舉原因&#xff1a;廣播網絡中使路由信息交換更加高速有序&#xff0c;可以降低需要維護的鄰接關系數量 基本概念&#xff1a; DR (Designated Router, 指定路由器)&#xff1a;負責在廣播網絡&#xff08;以太網&#xff09;或NBMA網…

[特殊字符]?[特殊字符]Linux驅動開發入門 | 并發與互斥機制詳解

文章目錄 &#x1f468;?&#x1f4bb;Linux驅動開發入門 | 并發與互斥機制詳解&#x1f4cc;為什么驅動中需要并發和互斥控制&#xff1f;&#x1f4a1;常見的并發控制機制&#x1f510;自旋鎖和信號量通俗理解&#x1f300;自旋鎖&#xff08;Spinlock&#xff09;——“廁所…

Kafka 架構設計和組件介紹

什么是Apache Kafka&#xff1f; Apache Kafka 是一個強大的開源分布式事件流平臺。它最初由 LinkedIn 開發&#xff0c;最初是一個消息隊列&#xff0c;后來發展成為處理各種場景數據流的工具。 Kafka 的分布式系統架構支持水平擴展&#xff0c;使消費者能夠按照自己的節奏檢…

elk中kibana一直處于可用和降級之間且es群集狀態并沒有問題的解決方法

前言 在公司部elk的時候發現kibana的web界面一直很卡&#xff0c;數據量為0也會很卡&#xff0c;es群集狀態正常&#xff0c;資源足夠。 報錯信息 [2025-03-17T09:54:50.19400:00][INFO ][status] Kibana is now available (was degraded) [2025-03-17T09:55:03.28000:00][I…

什么是視頻上墻

視頻聯動上墻是指當監控系統中出現報警或其他特定事件時&#xff0c;相關的視頻畫面能夠自動切換并顯示在指定的監控大屏或顯示設備上&#xff0c;以便監控人員能夠快速、直觀地查看事件現場的情況&#xff0c;及時做出響應和處理。 具體介紹? 系統組成 &#xff1a;一般由前端…

26考研——存儲系統(3)

408答疑 文章目錄 一、存儲器概述二、主存儲器三、主存儲器與 CPU 的連接四、外部存儲器五、高速緩沖存儲器六、虛擬存儲器七、參考資料鮑魚科技課件26王道考研書 八、總結復習提示思考題常見問題和易混淆知識點 一、存儲器概述 文章鏈接: 點擊跳轉 二、主存儲器 文章鏈接: …

.NET 6 + Dapper + User-Defined Table Type

大家都知道&#xff0c;對于SQL Server IN是有限制條件的&#xff0c;如果IN里面的內容過多&#xff0c;在執行的時候會被自動截斷&#xff0c;因而導致查詢到的結果不是實際需要的結果。 select * from Payments where Id in (1,2,3,4,...) 為了解決上面的限制&#xff0c;可以…