工作記錄vue3 echarts地圖等 監聽瀏覽器等寫法

子組件<template><div><div>【云端報警風險】</div><div ref="target" class="w-full h-full"></div></div>
</template><script setup>
import { ref, onMounted,watch } from 'vue';
import * as echarts from "echarts";
// 定義接收父組件傳來的值
const props = defineProps({data: {type: Object,required: true,},
});
// console.log(props.data);
// 1.初始化
let myChart = null;
const target = ref(null);
onMounted(() => {myChart = echarts.init(target.value);renderChart();
});// 2.構建 option 配置對象
const renderChart = () => {const options = {// 雷達圖坐標系配置radar: {name: {textStyle: {color: "#05D5FF",fontSize: 14}},shape: 'polygon',center: ['50%', '50%'],radius: '80%',startAngle: 120,// 軸線axisLine: {lineStyle: {color: 'rgba(2,213,255,.8)'}},// 網格線splitLine: {show: true,lineStyle: {with: 1,color: 'rgba(5,213,255,.8)'}},// 指示器名稱indicator: props.data.risks.map(item => ({name: item.name,max: 100})),splitArea: {show:false}},// 位置、極點polar: {center: ['50%', '50%'],radius:'0%'},// 坐標角度angleAxis: {min: 0,interval: 5,clockwise:false,//刻度逆時針},// 徑向軸radiusAxis: {min: 0,interval: 20,splitLine: {show:true}},// 圖表核心配置series: {type: 'radar',symbol: 'circle',symbolSize: 10,itemStyle: {normal: {color:'#05D5FF'}},areaStyle: {normal: {color: '#05D5FF',opacity:0.5}},lineStyle: {with: 2,color:'#05D5FF'},label: {normal: {show:true,color: '#05D5FF',}},data: [{value:props.data.risks.map(item=>item.value)}]}}// 3.通過實例.setOptions(option)myChart.setOption(options);
};
watch(() => props.data,renderChart)</script><style lang="scss" scoped></style>監聽瀏覽器const $router = useRouter()// 獲取寬度
const windowSize = () => {let width = document.documentElement.clientWidth;width<=768?$router.push({ path: "/m" }):""
}
window.addEventListener("resize", windowSize);
windowSize()

echarts 地圖app.vue<script setup>
import { RouterView } from 'vue-router'
import { provide } from 'vue';
import * as echarts from 'echarts'
import chalk from '@/assets/theme/chalk'
import SocketService from './utils/socket_service'echarts.registerTheme('chalk', chalk)
provide('echarts', echarts)   //重點
provide('socket', SocketService.Instance)
</script><template><RouterView />
</template><style scoped></style>子組件<script setup>
import { ref, inject, onMounted, onBeforeUnmount } from 'vue';
import useRequest from '@/composables/useRequest'
import chinaJson from '@/assets/map/china.json'
import { getProvinceMapInfo } from '@/utils/map_utils.js'const echarts = inject('echarts')
const map_chart = ref(null)
let chartInstance = null
const initChart = () => {chartInstance = echarts.init(map_chart.value, 'chalk')echarts.registerMap('china', chinaJson)chartInstance.on('click', async (arg) => {const provinceInfo = getProvinceMapInfo(arg.name)// console.log(import.meta);    //讀取該文件的模塊路徑if (provinceInfo.key) {const areaData = await getAreaData(provinceInfo.path)echarts.registerMap(provinceInfo.key, { ...areaData })chartInstance.setOption({geo: {map: provinceInfo.key}})}})
}const getAreaData = (path) => import(/* @vite-ignore */path)const updataChart = () => {const titleFontSize = map_chart.value.offsetWidth / 100 * 3.6const option = {title: {text: "▎商家分布",left: 20,top: 20,textStyle: {fontSize: map_chart.value.offsetWidth / 100 * 2.5,}},legend: {left: '5%',bottom: '5%',orient: 'vertical',itemWidth: titleFontSize,itemHeight: titleFontSize,itemGap: titleFontSize,textStyle: {fontSize: titleFontSize / 2}},geo: {type: 'map',map: 'china',top: "5%",bottom: "5%",itemStyle: {areaColor: '#2E72BF',borderColor: '#333'}},}chartInstance.setOption(option)
}
const updataChartData = () => {const option = {series: seriesArr.value}chartInstance.setOption(option)
}const allData = ref([])
const seriesArr = ref([])   //放棄使用dataset,有點復雜不會弄。。。
const getData = async () => {const res = await useRequest('/map')allData.value = resseriesArr.value = res.map(i => ({type: 'effectScatter',rippleEffect: {scale: 5,brushType: 'stroke'},name: i.name,data: i.children,coordinateSystem: 'geo',//在地圖使用散點需要加上這項}))updataChartData()
}const screenAdapter = () => {updataChart()chartInstance.resize()
}onMounted(() => {getData()initChart()screenAdapter()window.addEventListener('resize', screenAdapter)
})
onBeforeUnmount(() => {window.removeEventListener('resize', screenAdapter)
})
defineExpose({screenAdapter
})
</script><template><div class="map_container"><div class="map_chart" ref="map_chart" @dblclick="updataChart"></div></div>
</template><style scoped>
.map_container,
.map_chart {width: 100%;height: 100%;overflow: hidden;
}
</style>使用<div class="map" :class="fullScreenStatus.map ? 'fullscreen' : ''"><Map ref="map"></Map><span @click="changeSize('map')" class="iconfont enlargement":class="fullScreenStatus.map ? 'icon-compress-alt' : 'icon-expand-alt'"></span></div>map_utils.jsconst nameChange = {安徽: 'anhui',陜西: 'shanxi1',澳門: 'aomen',北京: 'beijing',重慶: 'chongqing',福建: 'fujian',甘肅: 'gansu',廣東: 'guangdong',廣西: 'guangxi',貴州: 'guizhou',海南: 'hainan',河北: 'hebei',黑龍江: 'heilongjiang',河南: 'henan',湖北: 'hubei',湖南: 'hunan',江蘇: 'jiangsu',江西: 'jiangxi',吉林: 'jilin',遼寧: 'liaoning',內蒙古: 'neimenggu',寧夏: 'ningxia',青海: 'qinghai',山東: 'shandong',上海: 'shanghai',山西: 'shanxi',四川: 'sichuan',臺灣: 'taiwan',天津: 'tianjin',香港: 'xianggang',新疆: 'xinjiang',西藏: 'xizang',云南: 'yunnan',浙江: 'zhejiang'
}export function getProvinceMapInfo (arg) {const path = `/src/assets/map/province/${nameChange[arg]}`return {key: nameChange[arg],path: path}
}socket_service.jsexport default class SocketService {static instance = nullstatic get Instance() {if (!this.instance) {this.instance = new SocketService()}return this.instance}ws = nullconnected = falseconnectRetryCount = 0connect() {if (!window.WebSocket) {return console.log('瀏覽器不支持websocket');}this.ws = new WebSocket('ws://localhost:9998')this.ws.onopen = () => {console.log('服務器連接成功');this.connected = truethis.connectRetryCount = 0}// 鏈接失敗或連接后斷開會調用this.ws.onclose = () => {console.log('連接服務器失敗');this.connected = falsethis.connectRetryCount++setTimeout(() => {this.connect()}, this.connectRetryCount * 500)}this.ws.onmessage = msg => {console.log('從服務器獲取到了數據');// console.log(msg.data);const recvData = JSON.parse(msg.data)const socketType = recvData.socketTypeif (this.callBackMapping[socketType]) {const action = recvData.actionif (action === 'getData') {const realData = JSON.parse(recvData.data)this.callBackMapping[socketType].call(this, realData)} else if (action === 'fullScreen') {} else if (action === 'themeChange') {}}}}callBackMapping = {}registerCallBack(socketType, callBack) {this.callBackMapping[socketType] = callBack}unRegisterCallBack(socketType) {this.callBackMapping[socketType] = callBack}sendRetryCount = 0send(data) {if (this.connected) {this.sendRetryCount = 0this.ws.send(JSON.stringify(data))} else {this.sendRetryCount++setTimeout(() => {this.send(data)}, this.sendRetryCount * 500)}}
}main.js引入import { createApp } from 'vue'
import { createPinia } from 'pinia'import App from './App.vue'
import router from './router'// 重置樣式
import 'normalize.css'// 字體文件
import './assets/font/iconfont.css'import './assets/main.css'import SocketService from './utils/socket_service'
// 開啟websocket
SocketService.Instance.connect()const app = createApp(App)app.use(createPinia())
app.use(router)app.mount('#app')

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

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

相關文章

算能RISC-V通用云開發空間編譯pytorch @openKylin留檔

終于可以體驗下risc-v了&#xff01; 操作系統是openKylin&#xff0c;算能的云空間 嘗試編譯安裝pytorch 首先安裝git apt install git 然后下載pytorch和算能cpu的庫&#xff1a; git clone https://github.com/sophgo/cpuinfo.git git clone https://github.com/pytorc…

小米14 Ultra:未來科技的集大成者

博主貓頭虎的技術世界 &#x1f31f; 歡迎來到貓頭虎的博客 — 探索技術的無限可能&#xff01; 專欄鏈接&#xff1a; &#x1f517; 精選專欄&#xff1a; 《面試題大全》 — 面試準備的寶典&#xff01;《IDEA開發秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鴻蒙》 …

opencv圖像的本質

目的 OpenCV是一個跨平臺的庫&#xff0c;使用它我們可以開發實時的計算機視覺應用程序。 它主要集中在圖像處理&#xff0c;視頻采集和分析&#xff0c;包括人臉檢測和物體檢測等功能。 數字圖像在計算機中是以矩陣形式存儲的&#xff0c;矩陣中的每一個元素都描述一定的圖像…

VSCode React JavaScript Snippets 插件的安裝與使用指南

VSCode React JavaScript Snippets 插件的安裝與使用指南 在開發 React 項目時&#xff0c;提高效率是每個開發者都追求的目標之一。VSCode React JavaScript Snippets 插件就是為了提升 React 開發效率而設計的&#xff0c;它為常用的 React 代碼片段提供了快捷鍵&#xff0c;…

NXP實戰筆記(六):S32K3xx基于RTD-SDK在S32DS上配置PWM發波

目錄 1、概述 2、SDK配置 2.1、Port配置 2.2、Emios_Mcl_Ip 2.3、Emios_Pwm 2.4、代碼示例 1、概述 針對S32K3xx芯片&#xff0c;產生PWM的硬件支持單元僅有兩個&#xff0c;分別是eMiosx與Flexio. 生成PWM的順序&#xff0c;按照單片機所用資源進行初始化執行如下 初始化…

去年面試的運維開發面試題二

VPN有哪些協議&#xff0c;不同協議之間有何區別&#xff1f; 2.內部組網通常使用哪些類型的網段&#xff0c;兩個不同網段如何通信&#xff1f; 3.Linux中絕對路徑&#xff0c;相對路徑的區別 4. Linux如何添加磁盤&#xff0c;擴容系統文件&#xff1f; 5. Linux如何查看進程…

原型模式(Prototype Pattern) C++

上一節&#xff1a;建造者模式&#xff08;Builder Pattern&#xff09;C 文章目錄 0.理論1.原型模式的核心組成&#xff1a;2.實現方法3.什么時候使用 1.實踐步驟 1: 定義怪物原型步驟 2: 實現具體怪物原型步驟 3: 使用原型創建怪物 0.理論 原型模式&#xff08;Prototype P…

7-liunx服務器規范

目錄 概況liunx日志liunx系統日志syslog函數openlog 可以改變syslog默認輸出方式 &#xff0c;進一步結構化 用戶信息進程間的關系會話ps命令查看進程關系 系統資源限制改變工作目錄和根目錄服務器程序后臺話 概況 liunx服務器上有很多細節需要注意 &#xff0c;這些細節很重要…

服務網格Service Mesh和Istio

文章目錄 服務網格&#xff08;Service Mesh&#xff09;市場上三種服務網格解決方案服務網格的特征流量管理安全性可觀察性 Istio簡介Istio提供了什么功能服務 &#xff1f;Istio 核心特性流量管理安全可觀察性 平臺支持 服務網格&#xff08;Service Mesh&#xff09; 服務網…

Eureka注冊中心(黑馬學習筆記)

Eureka注冊中心 假如我們的服務提供者user-service部署了多個實例&#xff0c;如圖&#xff1a; 大家思考幾個問題&#xff1a; order-service在發起遠程調用的時候&#xff0c;該如何得知user-service實例的ip地址和端口&#xff1f; 有多個user-service實例地址&#xff0c…

六、行列式基本知識

目錄 1、行列式的特性 2、行列式的計算方法: 2.1 通過行列式的定義去計算:對角法則。 2. 2 利用行列式的性質將行列式轉化為上三角行列式: ①行列式的性質 : 性質一: 性質二: 性質三: 性質四:行列式之間的加法

TreeData 數據查找

TreeData 數據查找 最近做需求的時候遇到了這樣的一個需求&#xff0c;Tree組件數據支持查找&#xff0c;而且TreeData的數據層級是無限級的 開始想的事借助UI組件庫&#xff08;Ant-design-vue&#xff09;中的Tree組件的相關方法直接實現,看了下api 發現沒法實現&#xff0c;…

超級實用的python代碼片段匯總和詳細解析(16個)

目錄 1. 生成隨機文本 2. 計算文本文件中的字數 3. 替換文件文件中的字串 4. 多文件名的批量替換 5. 從網站提取數據 6. 批量下載圖片 7.批量刪除空文件夾 8.Excel表格讀寫 9.合并Excel表格工作簿 10.數據庫SQL查詢 11. 系統進程查殺 12.圖像尺寸調整和裁剪 13.圖…

redis實現消息隊列redis發布訂閱redis監聽key

文章目錄 Redis消息隊列實現異步秒殺1. jvm阻塞隊列問題2. 什么是消息隊列3. Redis實現消息隊列1. 基于List結構模擬消息隊列操作優缺點 2. 基于PubSub發布訂閱的消息隊列操作優缺點spring 結合redis的pubsub使用示例1. 引入依賴2. 配置文件3. RedisConfig4. CustomizeMessageL…

大語言模型的開山之作—探秘GPT系列:GPT-1-GPT2-GPT-3的進化之路

模型模型參數創新點評價GPT1預訓練微調&#xff0c; 創新點在于Task-specific input transformations。GPT215億參數預訓練PromptPredict&#xff0c; 創新點在于Zero-shotZero-shot新穎度拉滿&#xff0c;但模型性能拉胯GPT31750億參數預訓練PromptPredict&#xff0c; 創新點…

pclpy 可視化點云(多窗口可視化、單窗口多點云可視化)

pclpy 可視化點云&#xff08;多窗口可視化、單窗口多點云可視化&#xff09; 一、算法原理二、代碼三、結果1.多窗口可視化結果2.單窗口多點云可視化 四、相關數據五、問題與解決方案1.問題2.解決 一、算法原理 原理看一下代碼寫的很仔細的。。目前在同一個窗口最多建立2個窗…

ESP8266智能家居(3)——單片機數據發送到mqtt服務器

1.主要思想 前期已學習如何用ESP8266連接WIFI&#xff0c;并發送數據到服務器。現在只需要在單片機與nodeMCU之間建立起串口通信&#xff0c;這樣單片機就可以將傳感器測到的數據&#xff1a;光照&#xff0c;溫度&#xff0c;濕度等等傳遞給8266了&#xff0c;然后8266再對數據…

Java Web3J :使用web3j調用自己的智能合約,返回一個內部有數組的對象結構時出現NPE問題

之前有寫過一篇文章Java Web3J :使用web3j調用自己的智能合約的方法(教程),當時只是簡單的方法調用,也不涉及到什么復雜的數據類型,入參是long類型,出參是String類型。 目錄 問題描述報錯信息嘗試解決控制變量法查看源碼網上查閱解決最后問題描述 遇到這個問題是因為有…

【AI應用】SoraWebui——在線文生視頻工具

SoraWebui 是一個開源項目&#xff0c;允許用戶使用 OpenAI 的 Sora 模型使用文本在線生成視頻&#xff0c;從而簡化視頻創建&#xff0c;并具有輕松的一鍵網站部署功能 在 Vercel 上部署 1. 克隆項目 git clone gitgithub.com:SoraWebui/SoraWebui.git 2. 安裝依賴 cd Sor…

本科畢業設計(論文)開題報告:基于人工智能的短視頻獲客平臺的設計與實現

目錄 1.選題概述1.題目背景2.目的及意義3.技術現狀 2.題目內容1.任務概述2.系統設計1.數據采集模塊&#xff1a;2.數據處理與分析模塊&#xff1a;3.客戶識別模塊&#xff1a;4.推廣策略模塊&#xff1a; 3.功能模塊1.數據采集模塊&#xff1a;2.數據處理與分析模塊&#xff1a…