tailwind+react组件实现销售后台仪表盘效果代码

代码语言:html

所属分类:布局界面

代码描述:tailwind+react组件实现销售后台仪表盘效果代码

代码标签: tailwind react 组件 销售 后台 仪表盘

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
  

  <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
  
  
  
<style>
.half-circle-pie {
	display: block;
	width: 100%;
	max-width: 30rem;
	height: auto;
}
.icon {
	display: block;
	width: 1em;
	height: 1em;
}
</style>


  
  
</head>

  <body class="bg-gray-200 text-black dark:bg-gray-900 dark:text-white transition-colors duration-300">
	<div id="root"></div>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/babel.7.18.13.js"></script>

<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/react.production.18.2.0.js"></script>

<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/react-dom.production.18.2.0.js"></script>
    <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/tailwindcss.3.4.16.js"></script>
      <script type="text/babel">
       const { useEffect, useRef, useState,StrictMode} = window.React;
  const { createRoot } = window.ReactDOM;


class Formatter {
	static LOCALE = "en-US";
	static CURRENCY = "USD";

	static count(value) {
		return new Intl.NumberFormat(this.LOCALE).format(value);
	}

	static currency(value) {
		return new Intl.NumberFormat(this.LOCALE, {
			currency: this.CURRENCY,
			style: "currency",
			notation: "compact",
			maximumFractionDigits: 1
		}).format(value);
	}

	static percent(value) {
		return new Intl.NumberFormat(this.LOCALE, {
			maximumFractionDigits: 1,
			style: "percent"
		}).format(value);
	}

	static date(date) {
		return new Intl.DateTimeFormat(this.LOCALE, {
			dateStyle: "short"
		}).format(date);
	}
}

class Random {
	static random() {
		return crypto.getRandomValues(new Uint32Array(1))[0] / 2**32;
	}

	static float(min, max) {
		return (this.random() * (max - min)) + min;
	}

	static hash() {
		return Math.round(this.float(0,1) * 0xffff).toString(16);
	}

	static int(min, max) {
		return Math.floor(this.random() * (max - min)) + min;
	}
}

function fakeData() {
	const data = {
		overview: {
			top: Random.int(1,15) / 100,
			sales_goals: 0.672,
			number_of_sales: 2608,
			change: 0.035,
			total_sales: 42200,
			total_change: -0.045
		},
		users: [
			{
				name: "Jack O. Lantern",
				avatar: "https://assets.codepen.io/416221/photo-avatar1.jpg"
			},
			{
				name: "Jane Doe",
				avatar: "https://assets.codepen.io/416221/photo-avatar2.jpg"
			},
			{
				name: "Joe Schmoe",
				avatar: "https://assets.codepen.io/416221/photo-avatar3.jpg"
			}
		],
		performance: {
			history: []
		},
		convert_rate: 0.375,
		customer_calls: [
			{
				name: "Ann Thrax",
				vip: true,
				source: "TikTok Leads"
			}
		],
		sales_target: {
			target: 42200,
			streams: [
				{
					change: -0.2,
					revenue: 6800,
					source: "Instagram"
				},
				{
					change: -0.45,
					revenue: 8200,
					source: "Facebook"
				},
				{
					change: 0.7,
					revenue: 15400,
					source: "TikTok"
				},
				{
					change: -0.5,
					revenue: 11800,
					source: "Other"
				}
			]
		}
	};

	const historyPercents = [0.8,0.2,0.5,0.2,0.9,0.3,0.55,0.3,0.15,0.8,0.35,0.3,0.4,0.2,0.85,0.25,0.852];

	historyPercents.forEach((percent, i) => {
		const date = new Date();
		date.setDate(date.getDate() - (historyPercents.length - (i + 1)));
		data.performance.history.push({date, percent});
	});

	return data;
}

createRoot(document.getElementById("root")).render(
	<StrictMode>
		<IconSprites />
		<Dashboard data={fakeData()} />
	</StrictMode>
);

function ActionBar({ users }) {
	const newestUsers = users.slice(0,3);

	return (
		<div className="flex flex-col sm:flex-row justify-between gap-x-1 gap-y-3 mb-6">
			<div className="flex gap-1 items-center">
				{newestUsers.map((user, i) => (
					<Avatar key={i} {...user} indentStart={i > 0} />
				).........完整代码请登录后点击上方下载按钮下载查看

网友评论0