|
|
@@ -1,5 +1,6 @@
|
|
|
import { IconArrowsCross, IconBolt, IconBoltOff, IconDisc } from "@tabler/icons-react";
|
|
|
import { useNavigate } from "react-router-dom";
|
|
|
+import { HasPermission } from "src/components";
|
|
|
import { useHostReport } from "src/hooks";
|
|
|
import { T } from "src/locale";
|
|
|
|
|
|
@@ -15,100 +16,111 @@ const Dashboard = () => {
|
|
|
<div className="row row-deck row-cards">
|
|
|
<div className="col-12 my-4">
|
|
|
<div className="row row-cards">
|
|
|
- <div className="col-sm-6 col-lg-3">
|
|
|
- <a
|
|
|
- href="/nginx/proxy"
|
|
|
- className="card card-sm card-link card-link-pop"
|
|
|
- onClick={(e) => {
|
|
|
- e.preventDefault();
|
|
|
- navigate("/nginx/proxy");
|
|
|
- }}
|
|
|
- >
|
|
|
- <div className="card-body">
|
|
|
- <div className="row align-items-center">
|
|
|
- <div className="col-auto">
|
|
|
- <span className="bg-green text-white avatar">
|
|
|
- <IconBolt />
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- <div className="col">
|
|
|
- <div className="font-weight-medium">
|
|
|
- <T id="proxy-hosts.count" data={{ count: hostReport?.proxy }} />
|
|
|
+ <HasPermission permission="proxyHosts" type="view" hideError>
|
|
|
+ <div className="col-sm-6 col-lg-3">
|
|
|
+ <a
|
|
|
+ href="/nginx/proxy"
|
|
|
+ className="card card-sm card-link card-link-pop"
|
|
|
+ onClick={(e) => {
|
|
|
+ e.preventDefault();
|
|
|
+ navigate("/nginx/proxy");
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <div className="card-body">
|
|
|
+ <div className="row align-items-center">
|
|
|
+ <div className="col-auto">
|
|
|
+ <span className="bg-green text-white avatar">
|
|
|
+ <IconBolt />
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ <div className="col">
|
|
|
+ <div className="font-weight-medium">
|
|
|
+ <T id="proxy-hosts.count" data={{ count: hostReport?.proxy }} />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </a>
|
|
|
- </div>
|
|
|
- <div className="col-sm-6 col-lg-3">
|
|
|
- <a
|
|
|
- href="/nginx/redirection"
|
|
|
- className="card card-sm card-link card-link-pop"
|
|
|
- onClick={(e) => {
|
|
|
- e.preventDefault();
|
|
|
- navigate("/nginx/redirection");
|
|
|
- }}
|
|
|
- >
|
|
|
- <div className="card-body">
|
|
|
- <div className="row align-items-center">
|
|
|
- <div className="col-auto">
|
|
|
- <span className="bg-yellow text-white avatar">
|
|
|
- <IconArrowsCross />
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- <div className="col">
|
|
|
- <T id="redirection-hosts.count" data={{ count: hostReport?.redirection }} />
|
|
|
+ </a>
|
|
|
+ </div>
|
|
|
+ </HasPermission>
|
|
|
+ <HasPermission permission="redirectionHosts" type="view" hideError>
|
|
|
+ <div className="col-sm-6 col-lg-3">
|
|
|
+ <a
|
|
|
+ href="/nginx/redirection"
|
|
|
+ className="card card-sm card-link card-link-pop"
|
|
|
+ onClick={(e) => {
|
|
|
+ e.preventDefault();
|
|
|
+ navigate("/nginx/redirection");
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <div className="card-body">
|
|
|
+ <div className="row align-items-center">
|
|
|
+ <div className="col-auto">
|
|
|
+ <span className="bg-yellow text-white avatar">
|
|
|
+ <IconArrowsCross />
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ <div className="col">
|
|
|
+ <T
|
|
|
+ id="redirection-hosts.count"
|
|
|
+ data={{ count: hostReport?.redirection }}
|
|
|
+ />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </a>
|
|
|
- </div>
|
|
|
- <div className="col-sm-6 col-lg-3">
|
|
|
- <a
|
|
|
- href="/nginx/stream"
|
|
|
- className="card card-sm card-link card-link-pop"
|
|
|
- onClick={(e) => {
|
|
|
- e.preventDefault();
|
|
|
- navigate("/nginx/stream");
|
|
|
- }}
|
|
|
- >
|
|
|
- <div className="card-body">
|
|
|
- <div className="row align-items-center">
|
|
|
- <div className="col-auto">
|
|
|
- <span className="bg-blue text-white avatar">
|
|
|
- <IconDisc />
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- <div className="col">
|
|
|
- <T id="streams.count" data={{ count: hostReport?.stream }} />
|
|
|
+ </a>
|
|
|
+ </div>
|
|
|
+ </HasPermission>
|
|
|
+ <HasPermission permission="streams" type="view" hideError>
|
|
|
+ <div className="col-sm-6 col-lg-3">
|
|
|
+ <a
|
|
|
+ href="/nginx/stream"
|
|
|
+ className="card card-sm card-link card-link-pop"
|
|
|
+ onClick={(e) => {
|
|
|
+ e.preventDefault();
|
|
|
+ navigate("/nginx/stream");
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <div className="card-body">
|
|
|
+ <div className="row align-items-center">
|
|
|
+ <div className="col-auto">
|
|
|
+ <span className="bg-blue text-white avatar">
|
|
|
+ <IconDisc />
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ <div className="col">
|
|
|
+ <T id="streams.count" data={{ count: hostReport?.stream }} />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </a>
|
|
|
- </div>
|
|
|
- <div className="col-sm-6 col-lg-3">
|
|
|
- <a
|
|
|
- href="/nginx/404"
|
|
|
- className="card card-sm card-link card-link-pop"
|
|
|
- onClick={(e) => {
|
|
|
- e.preventDefault();
|
|
|
- navigate("/nginx/404");
|
|
|
- }}
|
|
|
- >
|
|
|
- <div className="card-body">
|
|
|
- <div className="row align-items-center">
|
|
|
- <div className="col-auto">
|
|
|
- <span className="bg-red text-white avatar">
|
|
|
- <IconBoltOff />
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- <div className="col">
|
|
|
- <T id="dead-hosts.count" data={{ count: hostReport?.dead }} />
|
|
|
+ </a>
|
|
|
+ </div>
|
|
|
+ </HasPermission>
|
|
|
+ <HasPermission permission="deadHosts" type="view" hideError>
|
|
|
+ <div className="col-sm-6 col-lg-3">
|
|
|
+ <a
|
|
|
+ href="/nginx/404"
|
|
|
+ className="card card-sm card-link card-link-pop"
|
|
|
+ onClick={(e) => {
|
|
|
+ e.preventDefault();
|
|
|
+ navigate("/nginx/404");
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <div className="card-body">
|
|
|
+ <div className="row align-items-center">
|
|
|
+ <div className="col-auto">
|
|
|
+ <span className="bg-red text-white avatar">
|
|
|
+ <IconBoltOff />
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ <div className="col">
|
|
|
+ <T id="dead-hosts.count" data={{ count: hostReport?.dead }} />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </a>
|
|
|
- </div>
|
|
|
+ </a>
|
|
|
+ </div>
|
|
|
+ </HasPermission>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|