Commit 5a2a52aa authored by Bruce's avatar Bruce

Beta 1.0

parent 187c3371
...@@ -42,3 +42,8 @@ PUSHER_APP_CLUSTER=mt1 ...@@ -42,3 +42,8 @@ PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
InfluxDB_IP="192.168.5.107:8086"
InfluxDB_DB="TrafficInflux"
InfluxDB_Alpr_TABLE="Alpr"
InfluxDB_Log_TABLE="Log"
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</state>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="LaravelPluginSettings">
<option name="pluginEnabled" value="true" />
<option name="routerNamespace" value="" />
<option name="mainLanguage" value="en" />
</component>
</project>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="VcsDirectoryMappings"> <component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
<mapping directory="Z:/" vcs="Git" /> <mapping directory="Z:/" vcs="Git" />
</component> </component>
</project> </project>
\ No newline at end of file
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Alpr extends Model
{
//
protected $table = 'Alpr';
protected $fillable = [
'Plate_Number', 'Car_Type','Point_A_Enter_DateTime','Point_A_Device','Point_A_Image_Path','Point_B_Enter_DateTime','Point_B_Device','Point_B_Image_Path','Passing_Time','Distance','Speed','Speed_Limit','Location','Case_Number'
];
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Device extends Model
{
//
protected $table = 'Device';
protected $fillable = [
'Location', 'GPS','Server_ID','Device_Group_ID'
];
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Device_Group extends Model
{
//
protected $table = 'Device_Group';
protected $fillable = [
'Group_Name', 'Point_A_Device','Point_B_Device','Distance','Speed_Limit','Prohibited_Vehicles'
];
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Group extends Model
{
//
protected $table = 'Group';
protected $fillable = [
'Group_Name','Group_Detail'
];
}
...@@ -3,7 +3,10 @@ ...@@ -3,7 +3,10 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\User; use App\User;
use App\Group;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use MongoDB\BSON\Type;
use mysql_xdevapi\Collection;
use function MongoDB\BSON\toJSON; use function MongoDB\BSON\toJSON;
class AccountController extends Controller class AccountController extends Controller
...@@ -13,26 +16,73 @@ class AccountController extends Controller ...@@ -13,26 +16,73 @@ class AccountController extends Controller
{ {
$user = User::all(); $user = User::all();
return view('admin_acc',['Users'=>$user,'message'=>'']); // dd($user[0]['Group_ID']);
$group=new Group;
$users=collect();
foreach ($user as $u){
$temp=array();
$temp["name"]=$u['name'];
$temp["Auth_level"]=$u['Auth_level'];
$temp["Status"]=$u['Status'];
$group_name=($group->where('ID',$u['Group_ID'])->get())[0]["Group_Name"];
$temp["Group_Name"]=$group_name;
$users->add($temp);
}
$group=$group->all();
$groups=collect();
foreach ($group as $g){
$temp=array();
$temp["ID"]=$g["ID"];
$temp["Group_Name"]=$g["Group_Name"];
$amount=$user->where('Group_ID',$g['ID'])->count();
$temp["Amount"]=$amount;
$temp["Group_Detail"]=$g["Group_Detail"];
$groups->add($temp);
}
// dd($groups);
return view('admin_acc',['Users'=>$users,'Groups'=>$groups,'message'=>'']);
} }
public function store(Request $request) public function store(Request $request)
{ {
// 新增一筆資料 // if ($request->Group_Name)
// $request->Group_Name;
// // 新增一筆資料
// $group = new Group;
// $group->Group_Name=$request->Group_Name;
//
// try{
// $group->save();
// }
// catch (\Illuminate\Database\QueryException $e){
// $erro_meg="群組名稱已重複";
// //$e->getMessage(); 真正錯誤原因
// return back()->withError($erro_meg)->withInput();
// }
// 新增一筆資料
$user = new User; $user = new User;
$user->name = $request->name; $user->name = $request->name;
$user->password = bcrypt($request->password); $user->password = bcrypt($request->password);
$user->Auth_level = $request->Auth_level; $user->Auth_level = $request->Auth_level;
$user->Status = $request->Status; $user->Status = $request->Status;
$user->Group_ID = $request->Group_ID; // 群組設定
$group = new Group;
//dd($request->Group_Name);
if ($group->where('Group_Name',$request->Group_Name)->get()->isEmpty()){
$group->Group_Name=$request->Group_Name;
$group->save();
}
$group_id=$group->where('Group_Name',$request->Group_Name)->get();
$user->Group_ID = $group_id[0]->ID;
try{ try{
$user->save(); $user->save();
} }
catch (\Illuminate\Database\QueryException $e){ catch (\Illuminate\Database\QueryException $e){
$erro_meg="帳號已重複"; $erro_meg="帳號已重複";
//$e->getMessage(); 真正錯誤原因
return back()->withError($erro_meg)->withInput(); return back()->withError($erro_meg)->withInput();
//return redirect()->route('account',["message"=>get_class($e)]);
} }
return redirect()->route('account'); return redirect()->route('account');
} }
...@@ -41,13 +91,20 @@ class AccountController extends Controller ...@@ -41,13 +91,20 @@ class AccountController extends Controller
{ {
// 修改資料 // 修改資料
$user = User::where('name',$request->name); $user = User::where('name',$request->name);
$user->update([ try {
'name'=>$request->name, $user->update([
'password'=>bcrypt($request->password) == null ? $user->password : bcrypt($request->password), 'name' => $request->name,
'Auth_level'=>$request->Auth_level == null ? $user->Auth_level : $request->Auth_level, 'password' => bcrypt($request->password),
'Status'=>$request->Status == null ? $user->Status : $request->Status, 'Auth_level' => $request->Auth_level,
'Group_ID'=> $request->Group_ID == null ? $user->Group_ID : $request->Group_ID, 'Status' => $request->Status,
]); 'Group_ID' => $request->Group_ID,
]);
}
catch (Exception $e){
$erro_meg="修改失敗";
//$e->getMessage(); 真正錯誤原因
return back()->withError($erro_meg)->withInput();
}
return redirect()->route('account'); return redirect()->route('account');
} }
...@@ -61,8 +118,89 @@ class AccountController extends Controller ...@@ -61,8 +118,89 @@ class AccountController extends Controller
public function select(Request $request) public function select(Request $request)
{ {
// 查詢 // 查詢單筆
$user = User::where('name',$request->name)->get(); $user = User::where('name',$request->name)->get();
return $user ; $datas=collect();
$groups=new Group;
foreach ($user as $u){
$temp=array();
$temp["name"]=$u['name'];
$temp["Auth_level"]=$u['Auth_level'];
$temp["Status"]=$u['Status'];
$group_name=($groups->where('ID',$u['Group_ID'])->get())[0]["Group_Name"];
$temp["Group_Name"]=$group_name;
$temp['Group_ID']=$u['Group_ID'];
$datas->add($temp);
}
return $datas ;
}
public function R2_user(Request $request)
{
// 查詢多筆
$user = User::all();
if ($request->name !=null){
$user=$user->where("name",$request->name);
}
if ($request->Auth_level !=null){
$user = $user->where('Auth_level',$request->Auth_level);
}
if ($request->Status !=null){
$user = $user->where('Status',$request->Status);
}
$group=new Group;
if ($request->Group_Name !=null){
if ($group->where('Group_Name',$request->Group_Name)->get()->isEmpty()){
$meg = array("error"=>"群組名稱不存在");
$meg = json_encode($meg);
return $meg;
}
else{
$group_id=$group->where('Group_Name',$request->Group_Name)->get();
$group_id= $group_id[0]->ID;
$user = $user->where('Group_ID',$group_id);
}
}
if ($user->isEmpty()){
$meg = array("error"=>"查無結果");
$meg = json_encode($meg);
return $meg;
}
$datas=collect();
foreach ($user as $u){
$temp=array();
$temp["name"]=$u['name'];
$temp["Auth_level"]=$u['Auth_level'];
$temp["Status"]=$u['Status'];
$group_name=($group->where('ID',$u['Group_ID'])->get())[0]["Group_Name"];
$temp["Group_Name"]=$group_name;
$datas->add($temp);
}
return $datas;
}
// 使用者群組管理
public function create_group(Request $request){
$request->Group_Name;
// 新增一筆資料
$group = new Group;
$group->Group_Name=$request->Group_Name;
try{
$group->save();
}
catch (\Illuminate\Database\QueryException $e){
$erro_meg="群組名稱已重複";
//$e->getMessage(); 真正錯誤原因
return back()->withError($erro_meg)->withInput();
}
return redirect()->route('account');
} }
} }
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Alpr;
use App\Device_Group;
class AlprController extends Controller
{
//
public function index(){
// ->get('No','Plate_Number','Car_Type','Point_A_Enter_DateTime','Speed','Location','Speed_Limit','Prohibited_Vehicles','Violation','Case_Number','Point_A_Image_Path','Point_B_Image_Path','Status');
$alpr=Alpr::where("Status","待審核")->paginate(10);
foreach ($alpr as $al) {
$al->Speed=round($al->Speed,1);
}
$Dgs=Device_Group::all('Group_Name');
return view('plates')->with(["Alprs"=>$alpr,"Dgs"=>$Dgs]);
}
public function select(Request $request){
$alpr=Alpr :: where('Point_A_Enter_DateTime','>=',$request->start_time)->where('Point_A_Enter_DateTime','<=',$request->end_time);
// $alpr=Alpr :: where('Plate_Number','8503-LX')->get();
if ($alpr->get()->isEmpty()){
$meg = "該時段沒有資料";
return redirect()->route('plates');
}
if($request->Plate_Number != null)
$alpr=$alpr->where("Plate_Number",$request->Plate_Number);
if($request->Car_Type != null)
$alpr=$alpr->where("Car_Type",$request->Car_Type);
if($request->Group_Name != null)
$alpr=$alpr->where("Location",$request->Group_Name);
if($request->Violation != null)
$alpr=$alpr->where("Violation",$request->Violation);
if($request->Case_Number != null)
$alpr=$alpr->where("Case_Number",$request->Case_Number);
if($request->Status != null){
$alpr=$alpr->where("Status",$request->Status);
}
$alpr=$alpr->paginate(10);
if($alpr->isEmpty()){
$meg = "查無資料";
return redirect()->route('plates');
}
foreach ($alpr as $al) {
$al->Speed=round($al->Speed,1);
}
$Dgs=Device_Group::all('Group_Name');
return view('plates')->with(["Alprs"=>$alpr,"Dgs"=>$Dgs]);
}
public function update(Request $request){
$plate=$request->Plate_Number;
$status=$request->Status; // 待審核 已告發 已註銷 3種選項
try{
$alpr=Alpr ::where("No",$request->No);
$alpr->update([
"Plate_Number"=>$plate,
"Status"=>$status,
]);
}
catch (Exception $e){
$erro_meg="修改失敗";
// $e->getMessage(); 真正錯誤原因
return back()->withError($erro_meg)->withInput();
}
return redirect()->route('plates');
}
public function delete(Request $request){
try{
$alpr=Alpr ::where("No",$request->No);
$alpr->update(["Status"=>"已註銷"]);
}
catch (Exception $e){
$erro_meg="註銷失敗";
//$e->getMessage(); 真正錯誤原因
return back()->withError($erro_meg)->withInput();
}
return redirect()->route('plates');
}
}
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Device;
use App\Device_Group;
class DeviceController extends Controller
{
//
public function index(){
$device=Device::all();
$group=new Device_Group;
foreach ($device as $dv){
$group_name=$group->where("No",$dv["Device_Group_ID"])->get();
if(!$group_name->isEmpty()) {
$group_name = $group_name[0]["Group_Name"];
$dv["Device_Group_ID"] = $group_name;
}
else{
$dv["Device_Group_ID"]="無群組";
}
}
$groups=Device_Group :: all();
foreach ($groups as $gr){
if($gr["Point_A_Device"]==null){
$gr["Point_A_Device"]="無設備";
}
if($gr["Point_B_Device"]==null){
$gr["Point_B_Device"]="無設備";
}
}
return view('device')->with(["Devices"=>$device,"Groups"=>$groups]);
}
public function store(Request $request){
//新增一設備
$device=new Device;
$device->ID=str_replace( " ", "",$request->ID);
$device->Location=$request->Location;
$device->GPS=$request->GPS;
$device->Server_ID=$request->Server_ID;
try{
$device->save();
}
catch (\Illuminate\Database\QueryException $e){
$erro_meg="設備 名稱/ID 已重複";
//$e->getMessage(); 真正錯誤原因
return back()->withError($erro_meg)->withInput();
}
return redirect()->route('device');
}
public function select(Request $request){
$device=Device::all();
$groups=new Device_Group;
if ($request->ID != null){
$device=$device->where('ID',$request->ID);
}
if ($request->Location != null){
$device=$device->where('Location',$request->Location);
}
if ($request->Server_ID != null){
$device=$device->where('Server_ID',$request->Server_ID);
}
if ($request->Group_Name != null){
if ($request->Group_Name != "無群組"){
$group_id=$groups->where('Group_Name',$request->Group_Name)->get();
if ($group_id->isEmpty()){
$meg = array("error"=>"該群組不存在");
$meg = json_encode($meg);
return $meg;
}
$device=$device->where('Device_Group_ID',$group_id[0]["No"]);
}
else{
$device=$device->where('Device_Group_ID',null);
}
}
if($device->isEmpty()){
$meg = array("error"=>"查無結果");
$meg = json_encode($meg);
return $meg;
}
foreach ($device as $dv){
$group_name=$groups->where("No",$dv["Device_Group_ID"])->get();
if(!$group_name->isEmpty()) {
$group_name = $group_name[0]["Group_Name"];
$dv["Device_Group_ID"] = $group_name;
}
else{
$dv["Device_Group_ID"]="無群組";
}
}
return $device;
}
public function update(Request $request){
// 修改資料
$devices = Device::where('ID',$request->ID);
$device=$devices->get();
try {
$group=Device_Group :: where("No",$device[0]["Device_Group_ID"]);
$device_id=$device[0]["ID"];
if (!$group->where("Point_A_Device",$device_id)->get()->isEmpty()){
$group->update([
"Point_A_Device"=>$request->ID,
]);
}
else if (!$group->where("Point_B_Device",$device_id)->get()->isEmpty()){
$group->update([
"Point_B_Device"=>$request->ID,
]);
}
$devices->update([
'ID'=>str_replace( " ", "",$request->ID2),
'Location' => $request->Location,
'GPS' => $request->GPS,
'Server_ID' => $request->Server_ID,
]);
}
catch (Exception $e){
$erro_meg="修改失敗";
//$e->getMessage(); 真正錯誤原因
return back()->withError($erro_meg)->withInput();
}
return redirect()->route('device');
}
public function delete(Request $request){
// 刪除設備
$devices = Device::where('ID',$request->ID);
$device=$devices->get();
$group=Device_Group :: where("No",$device[0]["Device_Group_ID"]);
$device_id=$device[0]["ID"];
if (!$group->where("Point_A_Device",$device_id)->get()->isEmpty()){
$group->update([
"Point_A_Device"=>null,
]);
}
else if (!$group->where("Point_B_Device",$device_id)->get()->isEmpty()){
$group->update([
"Point_B_Device"=>null,
]);
}
$devices->delete();
return redirect()->route('device');
}
}
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Device_Group;
use App\Device;
class DeviceGroupController extends Controller
{
//
public function store(Request $request){
//新增一群組設備
$group=new Device_Group;
$group->Group_Name=$request->Group_Name;
if ($request->Point_A_Device==$request->Point_B_Device && $request->Point_A_Device != "無"){
$erro_meg="A、B兩點設備不可相同";
return back()->withError($erro_meg)->withInput();
}
$group->Point_A_Device=$request->Point_A_Device == "無" ? null : $request->Point_A_Device;
$group->Point_B_Device=$request->Point_B_Device == "無" ? null : $request->Point_B_Device;
$group->Distance=$request->Distance;
$group->Speed_Limit=$request->Speed_Limit;
$group->Prohibited_Vehicles=$request->Prohibited_Vehicles;
try{
$group->save();
$group_id=$group->get();
$group_id=$group_id[count($group_id)-1]["No"];
$device=Device ::where("ID",$request->Point_A_Device == "無" ? null : $request->Point_A_Device);
$device->update(["Device_Group_ID"=>$group_id]);
$device=Device ::where("ID",$request->Point_B_Device == "無" ? null : $request->Point_B_Device);
$device->update(["Device_Group_ID"=>$group_id]);
}
catch (\Illuminate\Database\QueryException $e){
$erro_meg="設備群組名稱已重複";
// $e->getMessage(); //真正錯誤原因
return back()->withError($erro_meg)->withInput();
}
return redirect()->route('device');
}
public function select(Request $request){
$group=Device_Group::all();
if ($request->Group_Name != null){
$group=$group->where('Group_Name',$request->Group_Name);
}
if ($request->Point_A_Device != null){
$group=$group->where('Point_A_Device',$request->Point_A_Device == "無" ? null : $request->Point_A_Device);
}
if ($request->Point_B_Device != null){
$group=$group->where('Point_B_Device',$request->Point_B_Device =="無" ? null : $request->Point_B_Device);
}
if ($request->Distance != null){
$group=$group->where('Distance',$request->Distance);
}
if ($request->Speed_Limit != null){
$group=$group->where('Speed_Limit',$request->Speed_Limit);
}
if ($request->Prohibited_Vehicles != null){
$group=$group->where('Prohibited_Vehicles',$request->Prohibited_Vehicles);
}
if($group->isEmpty()){
$meg = array("error"=>"查無結果");
$meg = json_encode($meg);
return $meg;
}
foreach ($group as $gp){
$gp["Point_A_Device"]=$gp["Point_A_Device"]== null ? "無設備" :$gp["Point_A_Device"];
$gp["Point_B_Device"]=$gp["Point_B_Device"]== null ? "無設備" :$gp["Point_B_Device"];
}
return $group;
}
public function update(Request $request){
// 修改資料
$group = Device_Group::where('No',$request->No);
if ($request->Point_A_Device==$request->Point_B_Device && $request->Point_A_Device != "無" && $request->Point_A_Device !=null){
$erro_meg="A、B兩點設備不可相同";
return back()->withError($erro_meg)->withInput();
}
$pa=$group->get()[0]["Point_A_Device"];
$pb=$group->get()[0]["Point_B_Device"];
try {
$group->update([
'Group_Name' => $request->Group_Name,
'Point_A_Device' => $request->Point_A_Device == "無" ? null : $request->Point_A_Device,
'Point_B_Device' => $request->Point_B_Device == "無" ? null : $request->Point_B_Device,
'Distance'=>$request->Distance,
'Speed_Limit'=>$request->Speed_Limit,
'Prohibited_Vehicles'=>$request->Prohibited_Vehicles,
]);
$group=$group->get();
$group_id=$group[0]["No"];
$group_a=$group[0]["Point_A_Device"];
$group_b=$group[0]["Point_B_Device"];
if ($group_a != $pa){
$device=Device ::where("ID",$pa);
$device->update(["Device_Group_ID"=>null]);
$device=Device ::where("ID",$group_a);
$device->update(["Device_Group_ID"=>$group_id]);
}
if ($group_b != $pb){
$device=Device ::where("ID",$pb);
$device->update(["Device_Group_ID"=>null]);
$device=Device ::where("ID",$group_b);
$device->update(["Device_Group_ID"=>$group_id]);
}
}
catch (Exception $e){
$erro_meg="修改失敗";
//$e->getMessage(); 真正錯誤原因
return back()->withError($erro_meg)->withInput();
}
return redirect()->route('device');
}
public function delete(Request $request){
// 刪除設備
$groups = Device_Group::where('No',$request->No);
$group=$groups->get();
$device=Device :: where("ID",$group[0]["Point_A_Device"]);
$device->update(["Device_Group_ID"=>null]);
$device=Device :: where("ID",$group[0]["Point_B_Device"]);
$device->update(["Device_Group_ID"=>null]);
$groups->delete();
return redirect()->route('device');
}
}
<?php
namespace App\Http\Controllers;
use App\Device_Group;
use App\User as Users;
use App\Pages;
use GuzzleHttp\Client;
use http\Client\Curl\User;
use Illuminate\Http\Request;
use function MongoDB\BSON\toJSON;
class InfluxdbController extends Controller
{
//
public function alpr_select(){
//+tz('Asia/Taipei')
$client = new Client();
$rep=$client ->request("GET",'http://'.env("InfluxDB_IP").'/query?q=select+*+from+'.env("InfluxDB_Alpr_TABLE").'+group+by+"Device_id"+order+by+ASC+&db='.env("InfluxDB_DB"));
$jsondata=json_decode($rep->getBody()->__toString(),true);
$datas=array();
// $device_ids=array();
foreach ($jsondata["results"][0]["series"] as $data){
$device_id=$data["tags"]["Device_id"];
$columns=$data["columns"];
$values=$data["values"];
$datas[$device_id]=$this->resultTojson($columns,$values,$device_id);
// array_push($device_ids,$device_id);
}
$this->alpr_merge($datas);
$data=$this->alpr_merge($datas,"國道187km");
return $data;
}
public function alpr_merge($datas){
//$DGs=Device_Group::where("Group_Name",$device_group)->get();
$DGs=Device_Group::all();
foreach ($DGs as $dg){
$A=$dg['Point_A_Device'];
$B=$dg['Point_B_Device'];
// dd($datas[$A][0]);
}
}
public function resultTojson($columns,$values,$page_name,$tags=null){
//date_default_timezone_set("Asia/Taipei");
$datas=array();
if ($page_name)
$pages=Pages :: all();
for($i=0 ; $i<count($values) ; $i++){
$temp=array();
if ($tags !=null)
$temp["Device_id"]=$tags;
for ($j=0;$j<count($columns);$j++){
$temp[$columns[$j]]=$values[$i][$j];
if ($columns[$j]=='time'){
$unitime=strtotime(substr($values[$i][$j],0,strpos($values[$i][$j],"."))."Z");
$temp[$columns[$j]]=date("Y-m-d H i s",$unitime);
}
if ($page_name && $columns[$j]=='Operate_Page'){
$page_name=$pages->where("Route",$values[$i][$j])->first()["Page_Name"];
$temp[$columns[$j]]= $page_name == null ? $values[$i][$j] : $page_name;
}
}
array_push($datas,$temp);
}
return $datas;
}
public function Log_select(Request $request){
$client = new Client();
$name=$request->name =='all' ? null : $request->name;
$page=$request->page =='all' ? null : $request->page;
$stime=$request->dateS == null ? date('Y-m-d') :$request->dateS;
$stime=$stime." 00:00:00";
$etime=$request->dateE;
$pg="";
// if ($page != null)
// {
// $page=Pages :: where('Page_Name',$page)->get();
// $pg.='+AND+"Operate_Page"+=+\''.$page[0]["Route"].'\'';
// }
if ($page != null)
{
$pg.='+AND+"Operate_Page"+=+\''.$page.'\'';
}
$etime=$etime!=null ? '+AND+"time"+<=+\''.$etime." 23:59:59".'\'':"";
$op=$name !=null ? '+AND+"Operator"+=+\''.$name.'\'':"";
$query=sprintf('http://'.env("InfluxDB_IP").'/query?q=select+*+from+'.env("InfluxDB_Log_TABLE").'+where+"time"+>=+\''.$stime.'\'%s%s%s+order+by+DESC+tz(\'Asia/Taipei\')+&db='.env("InfluxDB_DB"),$etime,$op,$pg);
$rep=$client ->request("GET",$query);
$jsondata=json_decode($rep->getBody()->__toString(),true);
if (count($jsondata["results"][0])>=2){
//$measurement=$jsondata["results"][0]["series"][0]["name"];
$columns=$jsondata["results"][0]["series"][0]["columns"];
$values=$jsondata["results"][0]["series"][0]["values"];
$datas=$this->resultTojson($columns,$values,true);
return $datas;
}
else{
return "查無結果";
}
}
public function dashboard_index(){
$client = new Client();
$stime=date("Y-m-01 00:00:00");
$etime=date("Y-m-t 23:59:59");
$rep=$client ->request("GET",'http://'.env("InfluxDB_IP").'/query?q=select+*+from+'.env("InfluxDB_Log_TABLE").'+where+"time"+>=+\''.$stime.'\'+AND+"time"+<=+\''.$etime.'\'+order+by+DESC+tz(\'Asia/Taipei\')+&db='.env("InfluxDB_DB"));
$jsondata=json_decode($rep->getBody()->__toString(),true);
//$measurement=$jsondata["results"][0]["series"][0]["name"];
$LogsArray=array();
$LogsArray["帳號管理"]["新增帳號"]=array();
$LogsArray["帳號管理"]["修改帳號"]=array();
$LogsArray["帳號管理"]["刪除帳號"]=array();
$LogsArray["帳號管理"]["查詢帳號"]=array();
$LogsArray["群組管理"]["新增群組"]=array();
$LogsArray["群組管理"]["修改群組"]=array();
$LogsArray["群組管理"]["刪除群組"]=array();
$LogsArray["車輛查詢"]["車輛查詢"]=array();
$LogsArray["車輛查詢"]["修改車輛"]=array();
$LogsArray["車輛查詢"]["刪除車輛"]=array();
$LogsArray["設備管理"]["新增設備"]=array();
$LogsArray["設備管理"]["修改設備"]=array();
$LogsArray["設備管理"]["刪除設備"]=array();
$LogsArray["設備管理"]["查詢設備"]=array();
$LogsArray["設備群組"]["新增設備群組"]=array();
$LogsArray["設備群組"]["修改設備群組"]=array();
$LogsArray["設備群組"]["刪除設備群組"]=array();
$LogsArray["設備群組"]["查詢設備群組"]=array();
// $LogsArray["日誌"]["查詢日誌"]=array();
$LogsArray["登錄"]=array();
if (count($jsondata["results"][0])>=2) {
$columns=$jsondata["results"][0]["series"][0]["columns"];
$values=$jsondata["results"][0]["series"][0]["values"];
$Logs=$this->resultTojson($columns,$values,false);
foreach ($Logs as $log) {
$page = $log["Operate_Page"];
switch ($page) {
case "admin/account/create":
array_push($LogsArray["帳號管理"]["新增帳號"], $log);
break;
case "admin/account/update":
array_push($LogsArray["帳號管理"]["修改帳號"], $log);
break;
case "admin/account/delete":
array_push($LogsArray["帳號管理"]["刪除帳號"], $log);
break;
case "admin/account/select/where":
array_push($LogsArray["帳號管理"]["查詢帳號"], $log);
break;
case "admin/account/group/create":
array_push($LogsArray["群組管理"]["新增群組"], $log);
break;
case "admin/account/group/update":
array_push($LogsArray["群組管理"]["修改群組"], $log);
break;
case "admin/account/group/delete":
array_push($LogsArray["群組管理"]["刪除群組"], $log);
break;
case "plates/select":
array_push($LogsArray["車輛查詢"]["車輛查詢"], $log);
break;
case "plates/update":
array_push($LogsArray["車輛查詢"]["修改車輛"], $log);
break;
case "plates/delete":
array_push($LogsArray["車輛查詢"]["刪除車輛"], $log);
break;
case "device/create":
array_push($LogsArray["設備管理"]["新增設備"], $log);
break;
case "device/update":
array_push($LogsArray["設備管理"]["修改設備"], $log);
break;
case "device/delete":
array_push($LogsArray["設備管理"]["刪除設備"], $log);
break;
case "device/select":
array_push($LogsArray["設備管理"]["查詢設備"], $log);
break;
case "device/group/create":
array_push($LogsArray["設備群組"]["新增設備群組"], $log);
break;
case "device/group/update":
array_push($LogsArray["設備群組"]["修改設備群組"], $log);
break;
case "device/group/delete":
array_push($LogsArray["設備群組"]["刪除設備群組"], $log);
break;
case "device/group/select":
array_push($LogsArray["設備群組"]["查詢設備群組"], $log);
break;
// case "dashboard/select":
// array_push($LogsArray["日誌"]["查詢日誌"], $log);
// break;
case "login":
array_push($LogsArray["登錄"], $log);
break;
// case route("acc_C"):
// $LogsArray["新增帳號"]=$log;
// case route("acc_C"):
// $LogsArray["新增帳號"]=$log;
// case route("acc_C"):
// $LogsArray["新增帳號"]=$log;
}
}
}
// dd($LogsArray);
// $LogsArray=json_encode($LogsArray,JSON_UNESCAPED_UNICODE);
$user=Users :: all();
$page=Pages :: all();
return view('dashboard')->with(["Logs"=>$LogsArray,"Users"=>$user,"Pages"=>$page]);
}
}
<?php
namespace App\Http\Controllers;
use App\Group;
use App\User;
use Illuminate\Http\Request;
class UserGroupController extends Controller
{
//
public function store(Request $request)
{
//新增一使用者群組
$group = new Group;
$group->Group_Name=$request->Group_Name;
if ($request->Group_Detail != null){
$group->Group_Detail=$request->Group_Detail;
}
try{
$group->save();
}
catch (\Illuminate\Database\QueryException $e){
$erro_meg="群組名稱已重複";
//$e->getMessage(); 真正錯誤原因
return back()->withError($erro_meg)->withInput();
}
return redirect()->route('account');
}
public function delete(Request $request){
//刪除一使用者群組
$group = Group::where('Group_Name',$request->Group_Name);
if (!$group->get()->isEmpty()){
$group_id=$group->get()[0]["ID"];
$user = new User;
if ($user->where('Group_ID',$group_id)->get()->isEmpty()){
$group->delete();
return redirect()->route('account');
// return;
}
else{
$erro_meg="群組內還有其他成員,不可刪除其群組";
//$e->getMessage(); 真正錯誤原因
return back()->withError($erro_meg)->withInput();
// return $erro_meg;
}
}
}
public function update(Request $request)
{
// 修改資料
$group = Group::where('ID',$request->ID);
try {
$group->update([
'Group_Name' => $request->Group_Name,
'Group_Detail' => $request->Group_Detail,
// 'Group_Detail' => $request->Group_Detail == null ? $group-> Group_Detail : $request->Group_Detail,
]);
}
catch (Exception $e){
$erro_meg="修改失敗";
//$e->getMessage(); 真正錯誤原因
return back()->withError($erro_meg)->withInput();
}
return redirect()->route('account');
}
}
...@@ -5,6 +5,8 @@ namespace App\Http\Middleware; ...@@ -5,6 +5,8 @@ namespace App\Http\Middleware;
use App\Log; use App\Log;
use Closure; use Closure;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
use MongoDB\BSON\Type; use MongoDB\BSON\Type;
class LogMiddleware class LogMiddleware
...@@ -24,24 +26,47 @@ class LogMiddleware ...@@ -24,24 +26,47 @@ class LogMiddleware
$ip = $request->ip(); //操作的IP $ip = $request->ip(); //操作的IP
$usernum=null; $usernum=null;
if (!Auth::check()){ if (!Auth::check()){
$usernum=0; $usernum="訪客";
} }
else{ else{
$usernum=$request->user('User')->id; //操作人(要自己獲取) $usernum=$request->user('User')->name; //操作人(要自己獲取)
} }
//print(sprintf("當前使用者ID: %s ,log 目前先不寫進資料庫,如果不想顯示此段訊息,或是想寫進資料庫,通知 Bruce",$usernum == 0 ? "訪客" : $usernum)); //print(sprintf("當前使用者ID: %s ,log 目前先不寫進資料庫,如果不想顯示此段訊息,或是想寫進資料庫,通知 Bruce",$usernum == 0 ? "訪客" : $usernum));
self::writeLog($usernum,$input,$path,$method,$ip); if ($method=="POST"){ //只紀錄 POST 的操作,諸如各頁面的CRUD
self::writeLog($usernum,$input,$path,$method,$ip);
}
return $next($request); return $next($request);
} }
public function writeLog($usernum,$input,$path,$method,$ip){ public function writeLog($usernum,$input,$path,$method,$ip){
// $log = new Log(); // $log=new Log();
// $log->setAttribute('Operator', $usernum); // $log->setAttribute('Operator', $usernum);
// $log->setAttribute('Operate_Page', $path); // $log->setAttribute('Operate_Page', $path);
// $log->setAttribute('Operate_Type', $method); // $log->setAttribute('Operate_Type', $method);
// $log->setAttribute('IP', $ip); // $log->setAttribute('IP', $ip);
// $log->setAttribute('Operate_Detail', json_encode($input, JSON_UNESCAPED_UNICODE)); // $log->setAttribute('Operate_Detail', json_encode($input, JSON_UNESCAPED_UNICODE));
// $log->save(); // $log->save();
if ($path !='plates/select'){
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'http://'.env("InfluxDB_IP").'/write?+&db='.env("InfluxDB_DB"),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"Log,Tag=logs Operator=\"".$usernum."\",Operate_Page=\"".$path."\",Operate_Type=\"".$method."\",IP=\"".$ip."\",Operate_Detail=\"".json_encode($input, JSON_UNESCAPED_UNICODE)."\"",
CURLOPT_HTTPHEADER => array(
"Content-Type: text/plain"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
}
} }
} }
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Pages extends Model
{
//
protected $table = 'Pages';
}
...@@ -27,7 +27,7 @@ class AuthServiceProvider extends ServiceProvider ...@@ -27,7 +27,7 @@ class AuthServiceProvider extends ServiceProvider
// 系統管理者 Gate 規則 // 系統管理者 Gate 規則
Gate::define('admin', function ($user) { Gate::define('admin', function ($user) {
return $user->Auth_level==777; return $user->Auth_level=="管理者";
}); });
// 一般管理者 Gate 規則 // 一般管理者 Gate 規則
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
"require": { "require": {
"php": "^7.1.3", "php": "^7.1.3",
"fideloper/proxy": "^4.0", "fideloper/proxy": "^4.0",
"guzzlehttp/guzzle": "^7.0",
"laravel/framework": "5.8.*", "laravel/framework": "5.8.*",
"laravel/tinker": "^1.0" "laravel/tinker": "^1.0"
}, },
......
This diff is collapsed.
File added
...@@ -18,20 +18,26 @@ class CreateAlprTable extends Migration ...@@ -18,20 +18,26 @@ class CreateAlprTable extends Migration
$table->string("Plate_Number",10); $table->string("Plate_Number",10);
$table->string("Car_Type",5); $table->string("Car_Type",5);
//$table->timestamp("Point A Enter DateTime"); //$table->timestamp("Point A Enter DateTime");
$table->string("Point_A_Enter_DateTime"); $table->dateTime("Point_A_Enter_DateTime",1);
$table->string("Point_A_Device"); $table->string("Point_A_Device");
$table->string("Point_A_Image_Path"); $table->string("Point_A_Image_Path");
//$table->timestamp("Point B Enter DateTime"); //$table->timestamp("Point B Enter DateTime");
$table->string("Point_B_Enter_DateTime"); $table->dateTime("Point_B_Enter_DateTime",1);
$table->string("Point_B_Device"); $table->string("Point_B_Device");
$table->string("Point_B_Image_Path"); $table->string("Point_B_Image_Path");
$table->float("Passing_Time"); $table->integer("Passing_Time");
$table->float("Distance"); $table->float("Distance");
$table->float("Speed"); $table->float("Speed");
$table->integer("Speed_Limit");
$table->string("Prohibited_Vehicles");
$table->string("Violation");
$table->string("Location");
$table->integer("Case_Number")->nullable(); $table->integer("Case_Number")->nullable();
$table->string("Status");
$table->timestamps();
}); });
} }
......
...@@ -15,11 +15,13 @@ class CreateDeviceGroupTable extends Migration ...@@ -15,11 +15,13 @@ class CreateDeviceGroupTable extends Migration
{ {
Schema::create('Device_Group', function (Blueprint $table) { Schema::create('Device_Group', function (Blueprint $table) {
$table->bigIncrements('No'); $table->bigIncrements('No');
$table->string("Group_Name",5); $table->string("Group_Name")->unique();
$table->integer("Point_A_Device"); $table->string("Point_A_Device",20)->nullable();
$table->integer("Point_B_Device"); $table->string("Point_B_Device",20)->nullable();
$table->float("Distance"); $table->float("Distance");
$table->integer("Speed_Limit"); $table->integer("Speed_Limit");
$table->string("Prohibited_Vehicles");
$table->timestamps();
}); });
} }
......
...@@ -14,10 +14,12 @@ class CreateDeviceTable extends Migration ...@@ -14,10 +14,12 @@ class CreateDeviceTable extends Migration
public function up() public function up()
{ {
Schema::create('Device', function (Blueprint $table) { Schema::create('Device', function (Blueprint $table) {
$table->bigIncrements('ID'); $table->string('ID',20)->primary();
$table->string("Location"); $table->string("Location")->unique();
$table->string("GPS"); $table->string("GPS");
$table->integer("Server_ID"); $table->integer("Server_ID");
$table->integer("Device_Group_ID")->nullable();
$table->timestamps();
}); });
} }
......
...@@ -19,6 +19,7 @@ class CreateSeverTable extends Migration ...@@ -19,6 +19,7 @@ class CreateSeverTable extends Migration
$table->string("IP"); $table->string("IP");
$table->string("Location"); $table->string("Location");
$table->string("Status"); $table->string("Status");
$table->timestamps();
}); });
} }
......
...@@ -14,8 +14,9 @@ class CreatePagesTable extends Migration ...@@ -14,8 +14,9 @@ class CreatePagesTable extends Migration
public function up() public function up()
{ {
Schema::create('Pages', function (Blueprint $table) { Schema::create('Pages', function (Blueprint $table) {
$table->bigIncrements('ID');
$table->string("Page_Name"); $table->string("Page_Name");
$table->string('Route')->unique();
$table->timestamps();
}); });
} }
......
...@@ -16,6 +16,8 @@ class CreateGroupTable extends Migration ...@@ -16,6 +16,8 @@ class CreateGroupTable extends Migration
Schema::create('Group', function (Blueprint $table) { Schema::create('Group', function (Blueprint $table) {
$table->bigIncrements('ID'); $table->bigIncrements('ID');
$table->string("Group_Name")->unique(); $table->string("Group_Name")->unique();
$table->string("Group_Detail")->nullable();
$table->timestamps();
}); });
} }
......
...@@ -17,7 +17,7 @@ class CreateUserTable extends Migration ...@@ -17,7 +17,7 @@ class CreateUserTable extends Migration
$table->bigIncrements('id'); $table->bigIncrements('id');
$table->string('name')->unique(); $table->string('name')->unique();
$table->string('password'); $table->string('password');
$table->integer("Auth_level"); $table->string("Auth_level");
$table->string("Status"); $table->string("Status");
$table->integer("Group_ID"); $table->integer("Group_ID");
$table->rememberToken(); $table->rememberToken();
......
...@@ -4,7 +4,7 @@ use Illuminate\Support\Facades\Schema; ...@@ -4,7 +4,7 @@ use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
class CreateAuthorityTable extends Migration class CreateAccessGroupTable extends Migration
{ {
/** /**
* Run the migrations. * Run the migrations.
...@@ -13,9 +13,11 @@ class CreateAuthorityTable extends Migration ...@@ -13,9 +13,11 @@ class CreateAuthorityTable extends Migration
*/ */
public function up() public function up()
{ {
Schema::create('Authority', function (Blueprint $table) { Schema::create('access_group', function (Blueprint $table) {
$table->integer('Auth_level'); $table->bigIncrements('No');
$table->string("Auth_Name"); $table->integer('Group_ID');
$table->integer('Device_Group_ID');
$table->timestamps();
}); });
} }
...@@ -26,6 +28,6 @@ class CreateAuthorityTable extends Migration ...@@ -26,6 +28,6 @@ class CreateAuthorityTable extends Migration
*/ */
public function down() public function down()
{ {
Schema::dropIfExists('Authority'); Schema::dropIfExists('access_group');
} }
} }
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateAuthorityTable extends Migration
{
// // 暫時用不到 ~~ 2020/08/28
// /**
// * Run the migrations.
// *
// * @return void
// */
// public function up()
// {
// Schema::create('Authority', function (Blueprint $table) {
// $table->integer('Auth_level');
// $table->string("Auth_Name");
// });
// }
//
// /**
// * Reverse the migrations.
// *
// * @return void
// */
// public function down()
// {
// Schema::dropIfExists('Authority');
// }
}
...@@ -6,6 +6,8 @@ use Illuminate\Database\Migrations\Migration; ...@@ -6,6 +6,8 @@ use Illuminate\Database\Migrations\Migration;
class CreateLogTable extends Migration class CreateLogTable extends Migration
{ {
// 已改存於 Influxdb 2020/08/28
/** /**
* Run the migrations. * Run the migrations.
* *
......
...@@ -11,13 +11,122 @@ class UserTableSeeder extends Seeder ...@@ -11,13 +11,122 @@ class UserTableSeeder extends Seeder
*/ */
public function run() public function run()
{ {
// // // 使用者
DB::table('User')->insert([ // DB::table('User')->insert([
'name' => "Test123", // 'name' => "Test123",
'password' => bcrypt('test123'), // 'password' => bcrypt('test123'),
'Auth_level' => 777, // 'Auth_level' => "管理者",
'Status' => "測試用", // 'Status' => "測試用",
'Group_ID' => 3, // 'Group_ID' => 1,
// ]);
// 設備群組
DB::table('Device_Group')->insert([
'Group_Name'=>'國道187km',
'Point_A_Device'=>1,
'Point_B_Device'=>2,
'Distance'=>10000,
'Speed_Limit'=>110,
'Prohibited_Vehicles'=>"機車"
]);
DB::table('Device_Group')->insert([
'Group_Name'=>'雪隧222km',
'Point_A_Device'=>3,
'Point_B_Device'=>4,
'Distance'=>9000,
'Speed_Limit'=>110,
'Prohibited_Vehicles'=>"機車"
]);
DB::table('Device_Group')->insert([
'Group_Name'=>'國道987km',
'Point_A_Device'=>5,
'Point_B_Device'=>6,
'Distance'=>8900,
'Speed_Limit'=>110,
'Prohibited_Vehicles'=>"機車"
]);
// 設備
DB::table('Device')->insert([
'ID'=>1,
'Location'=>'國道0km',
'GPS'=>'123.1234,456.4567',
'Server_ID'=>1,
'Device_Group_ID'=>1,
]); ]);
DB::table('Device')->insert([
'ID'=>2,
'Location'=>'國道187km',
'GPS'=>'234.6789,345.2678',
'Server_ID'=>1,
'Device_Group_ID'=>1,
]);
DB::table('Device')->insert([
'ID'=>3,
'Location'=>'國道333km',
'GPS'=>'123.1234,456.4567',
'Server_ID'=>1,
'Device_Group_ID'=>2,
]);
DB::table('Device')->insert([
'ID'=>4,
'Location'=>'國道444km',
'GPS'=>'234.6789,345.2678',
'Server_ID'=>1,
'Device_Group_ID'=>2,
]);
DB::table('Device')->insert([
'ID'=>5,
'Location'=>'國道555km',
'GPS'=>'123.1234,456.4567',
'Server_ID'=>1,
'Device_Group_ID'=>3,
]);
DB::table('Device')->insert([
'ID'=>6,
'Location'=>'國道666km',
'GPS'=>'234.6789,345.2678',
'Server_ID'=>1,
'Device_Group_ID'=>3,
]);
// // 使用者群組
// DB::table('Group')->insert([
// 'Group_Name'=>'測試群1',
// 'Group_Detail'=>'Hi',
// ]);
//
// // 頁面
// $routes=["admin/account/create","admin/account/update","admin/account/delete","admin/account/select/where","admin/account/group/create","admin/account/group/update","admin/account/group/delete","login","plates/select","plates/update","plates/delete","dashboard/select","device/create","device/select","device/update","device/delete","device/group/create","device/group/select","device/group/update","device/group/delete"];
// $routes_name=["新增帳號","修改帳號","刪除帳號","查詢帳號","新增群組","修改群組","刪除群組","登錄","查詢舉發資料","修改舉發資料","註銷舉發資料","查詢日誌","新增設備","查詢設備","修改設備","刪除設備","新增設備群組","查詢設備群組","修改設備群組","刪除設備群組"];
// for ($i =0;$i<count($routes);$i++){
// DB::table('Pages')->insert([
// 'Page_Name'=>$routes_name[$i],
// 'Route'=>$routes[$i],
// ]);
// }
// for($i =0 ;$i<=10;$i++){
// // 車牌辨識測速結果
// DB :: table('Alpr')->insert([
// "Plate_Number"=>"8503-LX",
// "Car_Type"=>"自小客車",
// "Point_A_Enter_DateTime"=>"2020-09-02 05:55:01",
// "Point_A_Device"=>1,
// "Point_A_Image_Path"=>"nas/alpr/influxTest/8503-LX.jpg",
// "Point_B_Enter_DateTime"=>"2020-09-02 05:56:20",
// "Point_B_Device"=>2,
// "Point_B_Image_Path"=>"nas/alpr/influxTest/8503-LX_0.jpg",
// "Passing_Time"=>79,
// "Distance"=>9000,
// "Speed"=>113.9,
// "Speed_Limit"=>110,
// "Prohibited_Vehicles"=>"機車",
// "Violation"=>"超速",
// "Location"=>"國道187km",
// "Status"=>"待審核",
// ]);
// }
} }
} }
...@@ -457,32 +457,32 @@ thead { ...@@ -457,32 +457,32 @@ thead {
.tm-table-mt { .tm-table-mt {
margin-top: 66px; margin-top: 66px;
} }
.page-item:first-child .page-link { /*.page-item:first-child .page-link {*/
border-top-left-radius: 0; /* border-top-left-radius: 0;*/
border-bottom-left-radius: 0; /* border-bottom-left-radius: 0;*/
} /*}*/
.page-item:last-child .page-link { /*.page-item:last-child .page-link {*/
border-top-right-radius: 0; /* border-top-right-radius: 0;*/
border-bottom-right-radius: 0; /* border-bottom-right-radius: 0;*/
} /*}*/
.page-link { /*.page-link {*/
padding: 12px 18px; /* padding: 12px 18px;*/
} /*}*/
.page-link, /*.page-link,*/
.page-link:hover { /*.page-link:hover {*/
color: #000; /* color: #000;*/
} /*}*/
.page-item { /*.page-item {*/
margin-right: 18px; /* margin-right: 18px;*/
} /*}*/
.page-item:last-child { /*.page-item:last-child {*/
margin-right: 0; /* margin-right: 0;*/
} /*}*/
.page-item.active .page-link { /*.page-item.active .page-link {*/
background-color: #e9ecef; /* background-color: #e9ecef;*/
border-color: #dee2e6; /* border-color: #dee2e6;*/
color: #000; /* color: #000;*/
} /*}*/
input[type="checkbox"] { input[type="checkbox"] {
cursor: pointer; cursor: pointer;
-webkit-appearance: none; -webkit-appearance: none;
...@@ -783,7 +783,7 @@ input[type="checkbox"]:focus { ...@@ -783,7 +783,7 @@ input[type="checkbox"]:focus {
} }
} }
.box1{ .box1{
width: 525px; width: 45%;
margin: 20px; margin: 20px;
padding: 10px; padding: 10px;
min-height: 200px; min-height: 200px;
...@@ -827,23 +827,26 @@ input[type="checkbox"]:focus { ...@@ -827,23 +827,26 @@ input[type="checkbox"]:focus {
} }
#screenshot{ .screenshot{
width: 525px; width: auto;
margin: 20px; margin: 20px;
padding: 10px; padding: 10px;
min-height: 200px; min-height: 200px;
position:absolute; position:absolute;
display: none; display: none;
overflow-y: hidden;
overflow-x: hidden;
background: -webkit-gradient(linear, 0% 20%, 0% 1000%, from(#fff), to(#fff), color-stop(.1,#f3f3f3)); background: -webkit-gradient(linear, 0% 20%, 0% 1000%, from(#fff), to(#fff), color-stop(.1,#f3f3f3));
border: 1px solid #ccc; border: 1px solid #ccc;
-webkit-box-shadow: 0px 3px 30px rgba(0, 0, 0, 0.1) inset; -webkit-box-shadow: 0px 3px 30px rgba(0, 0, 0, 0.1) inset;
-webkit-border-bottom-right-radius: 6px 50px; -webkit-border-bottom-right-radius: 6px 50px;
} }
#screenshot:before{ .screenshot:before{
content: ''; content: '';
width: 50px; width: 50px;
height: 100px; height: 100px;
overflow-y: hidden;
position:absolute; position:absolute;
bottom:0; right:0; bottom:0; right:0;
-webkit-box-shadow: 20px 20px 10px rgba(0, 0, 0, 0.1); -webkit-box-shadow: 20px 20px 10px rgba(0, 0, 0, 0.1);
...@@ -853,10 +856,11 @@ input[type="checkbox"]:focus { ...@@ -853,10 +856,11 @@ input[type="checkbox"]:focus {
rotate(-25deg); rotate(-25deg);
} }
#screenshot:after{ .screenshot:after{
content: ''; content: '';
width: 100px; width: 500px;
height: 100px; height: auto;
overflow-y: hidden;
top:0; left:0; top:0; left:0;
position:absolute; position:absolute;
display: inline-block; display: inline-block;
...@@ -866,3 +870,7 @@ input[type="checkbox"]:focus { ...@@ -866,3 +870,7 @@ input[type="checkbox"]:focus {
translate(20px,25px) translate(20px,25px)
skew(20deg); skew(20deg);
} }
.btn-primary-font{
font-family: 'Microsoft JhengHei UI';font-size: 16px;height: 16px;
}
<script type="text/javascript">
this.screenshotPreview=function(){
xOffset = 10;
yOffset = 30;
$(".car_info").hover(function(e){
var img='{{asset("/img/test_car.jpeg")}}';
document.getElementById("fluid-photo").innerHTML+="<p id='screenshot'><img style=\"max-width: 500px;height: auto\" src='"+img+"' /></p>";
$("#screenshot")
.css("top",(e.pageY - xOffset) + "px")
.css("left",(e.pageX + yOffset) + "px")
.fadeIn("fast");
},
function(){
$("#screenshot").remove();
});
$(".car_info").mousemove(function(e){
$("#screenshot")
.css("top",(e.pageY-xOffset)+"px")
.css("left",(e.pageX+yOffset)+"px");
});
};
$(document).ready(function(){
screenshotPreview();
});
</script>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment