123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343 |
- import { onMount, createSignal } from "solid-js"
- import DataSet from '@antv/data-set';
- import { Chart } from '@antv/g2';
- import utils from "../utils/index"
- import ItemHead from "../components/itemHead";
- import Table from "../components/table";
- import Water from "../components/water";
- import "../assets/style/Fourth.css"
- let WordEle, WordCanvas;
- let lastTime = Date.now();
- window.animationID = -1;
- const [timeDate, setTimeDate] = createSignal(utils.getTime())
- const [itemHeight, setItemHeight] = createSignal(utils.getTime())
- function animation() {
- window.animationID = window.requestAnimFrame(() => {
- const nowTime = Date.now();
- window.cancelrequestAnimFrame(window.animationID);
- animation()
- if ((nowTime - lastTime) < 1000) return
- lastTime = nowTime;
- setTimeDate(utils.getTime())
- })
- }
- function ClassificationChart() {
- const data = [
- { item: '执法形象', a: 70, b: 30 },
- { item: '突发事件', a: 60, b: 70 },
- { item: '突发事故', a: 50, b: 60 },
- { item: '涉警、涉公务人员问题', a: 40, b: 50 },
- { item: '政府形象问题', a: 60, b: 70 },
- { item: '涉稳事件', a: 70, b: 50 },
- { item: '治安管理', a: 50, b: 40 },
- { item: '民生问题', a: 30, b: 40 },
- { item: '地区重点企业', a: 60, b: 40 },
- { item: '案件问题', a: 50, b: 60 },
- ];
- const { DataView } = DataSet;
- const dv = new DataView().source(data);
- dv.transform({
- type: 'fold',
- fields: ['a', 'b'], // 展开字段集
- key: 'user', // key字段
- value: 'score', // value字段
- renderer: 'svg'
- });
- const chart = new Chart({
- container: 'Classification',
- autoFit: true,
- padding: 20,
- height: WordEle.offsetHeight - 110,
- });
- chart.data(dv.rows);
- chart.scale('score', {
- min: 0,
- max: 80,
- });
- chart.coordinate('polar', {
- radius: 0.8,
- });
- chart.tooltip({
- shared: true,
- showCrosshairs: true,
- crosshairs: {
- line: {
- style: {
- lineDash: [4, 4],
- stroke: '#333'
- }
- }
- }
- });
- chart.axis('item', {
- line: null,
- tickLine: null,
- grid: {
- line: {
- style: {
- lineDash: null,
- },
- },
- },
- });
- chart.axis('score', {
- line: null,
- tickLine: null,
- grid: {
- line: {
- type: 'line',
- style: {
- lineDash: null,
- },
- },
- },
- });
- chart
- .line()
- .position('item*score')
- .color('user')
- .size(2);
- chart
- .point()
- .position('item*score')
- .color('user')
- .shape('circle')
- .size(4)
- .style({
- stroke: '#fff',
- lineWidth: 1,
- fillOpacity: 1,
- });
- chart
- .area()
- .position('item*score')
- .color('user');
- chart.render();
- }
- function TrendChart() {
- const data = [
- { year: '1991', value: 15468 },
- { year: '1992', value: 16100 },
- { year: '1993', value: 15900 },
- { year: '1994', value: 17409 },
- { year: '1995', value: 17000 },
- { year: '1996', value: 31056 },
- { year: '1997', value: 31982 },
- { year: '1998', value: 32040 },
- { year: '1999', value: 33233 },
- ];
- const chart = new Chart({
- container: 'Trend',
- autoFit: true,
- height: WordEle.offsetHeight - 110,
- renderer: 'svg',
- padding: [20, 20, 30, 50],
- });
- chart.data(data);
- chart.scale({
- value: {
- min: 10000,
- nice: true,
- },
- year: {
- range: [0, 1],
- },
- });
- chart.tooltip({
- showCrosshairs: true,
- shared: true,
- });
- chart.axis('value', {
- label: {
- formatter: (val) => {
- return (val / 1000).toFixed(1) + 'k';
- },
- },
- });
- chart.area().position('year*value').shape('smooth');
- chart.line().position('year*value').shape('smooth');
- chart.render();
- }
- function WordsChart() {
- WordCanvas.width = WordEle.offsetWidth
- WordCanvas.height = WordEle.offsetHeight - 110
- window.TagCanvas.Start("wordCloud", "tags", {
- textColour: "#3AEDE4",
- outlineColour: "rgba(0,0,0,0)",
- maxSpeed: 0.003,
- lock: "y",
- });
- window.TagCanvas.SetSpeed("wordCloud", [3, 3]);
- }
- function Fourth() {
- onMount(() => {
- ClassificationChart()
- TrendChart()
- WordsChart()
- animation()
- setItemHeight(WordEle.offsetHeight - 43)
- })
- const tHead = [{ text: '发布时间', type: 'Text' }, { text: '信息来源', type: 'Text' }, { text: '信息标题', type: 'Text', flex: 2 }];
- const tBody = [
- {
- color: "",
- col: [
- { text: '31分钟前', type: 'Text', color: "rgb(215 1 1 / 60%)", flex: 1 },
- { text: '懂车帝', type: 'Text', color: "rgb(215 1 1 / 60%)", flex: 1 },
- {
- flex: 2,
- text: '国足又输了 [流泪][流泪][流泪] 孔老二搬家 ……尽是书 说实话,怪不了这帮小子,他们尽力了,他们也就这能耐。 没有高考不行! 但是,高考为大众目标的教育,必然导致足球人口畸少而且素质极差。 此题',
- type: 'Scroll',
- color: "rgb(215 1 1 / 60%)"
- }
- ]
- }
- ]
- return (
- <div class="page">
- <div class="row FourthLayout height50">
- <div class="col4" style={{"padding":"0 .5em"}}>
- <div class="timeSub">
- 预警运行时间:
- <div class="numberFonts">
- <span>{timeDate().year[2]}</span>
- <span>{timeDate().year[3]}</span>
- 年
- <span>{timeDate().month[0]}</span>
- <span>{timeDate().month[1]}</span>
- 月
- <span>{timeDate().day[0]}</span>
- <span>{timeDate().day[1]}</span>
- 日
- </div>
- <div class="numberFonts">
- <span>{timeDate().hour[0]}</span>
- <span>{timeDate().hour[1]}</span>
- 时
- <span>{timeDate().min[0]}</span>
- <span>{timeDate().min[1]}</span>
- 分
- <span>{timeDate().sec[0]}</span>
- <span>{timeDate().sec[1]}</span>
- 秒
- </div>
- </div>
- <div class="dataTotal" style={'height: ' + itemHeight() + 'px'}>
- <img style={{"float":"right"}} src="/src/assets/img/border_right.png" height="100%" />
- <div class="error">
- <div>
- <img src="/src/assets/img/all_error.png" style={{"width":"7em"}} />
- <div>全部预警</div>
- </div>
- <div>
- <img src="/src/assets/img/public_error.png" style={{"width":"7em"}} />
- <div>公共预警</div>
- </div>
- </div>
- <img src="/src/assets/img/link.gif" style={{"float":"right","width":"35%","height":"80%","margin-top":"2em"}} />
- <div class="data" style={{"width":"calc(75% - 1.68rem)","height":"100%"}}>
- <div class="allData">
- <div>监测信息总量</div>
- <img src="/src/assets/img/arrow_right.png" class="arrow" />
- <p>445349</p>
- </div>
- <div class="filterData">
- <div>排除信息量</div>
- <img src="/src/assets/img/arrow_right.png" class="arrow" />
- <p>444393</p>
- </div>
- <div class="proData">
- <div>排除信息占比</div>
- <img src="/src/assets/img/arrow_right.png" class="arrow arrow_left" />
- <p>99.79%</p>
- </div>
- <div style={{"height":"180px"}}>
- <div class="img">
- <img src="/src/assets/img/w1.png" style={{"top":"16px"}} alt="" />
- <img src="/src/assets/img/w2.png" style={{"top":"106px"}} alt="" />
- </div>
- </div>
- <Water percentage={0.21} text="舆情预警" />
- </div>
- </div>
- </div>
- <div class="col3">
- <ItemHead title="预警信息" subtitle="Warning Information" />
- <Table head={tHead} body={tBody} />
- </div>
- </div>
- <div class="row FourthLayout height50">
- <div class="col1">
- <ItemHead title="预警分类" subtitle="Warning Classification" />
- <div class="chart3" id="Classification"></div>
- </div>
- <div class="col1">
- <ItemHead title="预警趋势" subtitle="Warning Trend" />
- <div class="chart3" id="Trend"></div>
- </div>
- <div class="col1" ref={WordEle}>
- <ItemHead title="高频热词" subtitle="High-frequency words" />
- <div class="chart3 heightWord">
- <canvas id="wordCloud" ref={WordCanvas}></canvas>
- <div id="tags" class="tags" style={{"display":"none"}}>
- <ul>
- <li>
- <a href="http://www.google.com" target="_blank">Google</a>
- </li>
- <li><a href="/fish">Fish</a></li>
- <li><a href="/chips">Chips</a></li>
- <li><a href="/salt">Salt</a></li>
- <li><a href="/vinegar">Vinegar</a></li>
- <li>
- <a href="http://www.google.com" target="_blank">Google</a>
- </li>
- <li><a href="/fish">Fish</a></li>
- <li><a href="/chips">Chips</a></li>
- <li><a href="/salt">Salt</a></li>
- <li><a href="/vinegar">Vinegar</a></li>
- <li>
- <a href="http://www.google.com" target="_blank">Google</a>
- </li>
- <li><a href="/fish">Fish</a></li>
- <li><a href="/chips">Chips</a></li>
- <li><a href="/salt">Salt</a></li>
- <li><a href="/vinegar">Vinegar</a></li>
- <li>
- <a href="http://www.google.com" target="_blank">Google</a>
- </li>
- <li><a href="/fish">Fish</a></li>
- <li><a href="/chips">Chips</a></li>
- <li><a href="/salt">Salt</a></li>
- <li><a href="/vinegar">Vinegar</a></li>
- <li>
- <a href="http://www.google.com" target="_blank">Google</a>
- </li>
- <li><a href="/fish">Fish</a></li>
- <li><a href="/chips">Chips</a></li>
- <li><a href="/salt">Salt</a></li>
- <li><a href="/vinegar">Vinegar</a></li>
- </ul>
- </div>
- </div>
- </div>
- </div>
- </div>
- );
- }
- export default Fourth;
|