This commit is contained in:
zmj 2023-12-01 18:22:09 +08:00
commit 2e33cda8d5
68 changed files with 7592 additions and 0 deletions

24
.gitignore vendored Normal file
View File

@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

7
README.md Normal file
View File

@ -0,0 +1,7 @@
# Vue 3 + Vite
This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
## Recommended IDE Setup
- [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).

14
index.html Normal file
View File

@ -0,0 +1,14 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + Vue</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
</body>
</html>

3687
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

29
package.json Normal file
View File

@ -0,0 +1,29 @@
{
"name": "tradescreen",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"@dataview/datav-vue3": "^0.0.0-test.1672506674342",
"@jiaminghi/data-view": "^2.10.0",
"amfe-flexible": "^2.2.1",
"axios": "^1.6.2",
"echarts": "^5.4.3",
"echarts-gl": "^2.0.9",
"postcss-pxtorem": "^5.1.1",
"vue": "^3.3.8",
"vue-router": "^4.2.5"
},
"devDependencies": {
"@vitejs/plugin-vue": "^4.5.0",
"postcss-pxtorem": "^6.0.0",
"sass": "^1.69.5",
"sass-loader": "^13.3.2",
"vite": "^5.0.0"
}
}

1
public/vite.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

41
src/App.vue Normal file
View File

@ -0,0 +1,41 @@
<script setup lang="ts">
// @ts-ignore
import Header from "@/components/Header.vue"
</script>
<template>
<!-- <div>sadas</div> -->
<div class="main-box">
<Header></Header>
<router-view></router-view>
</div>
</template>
<style lang="scss">
@import '/static/font/font.css';
* {
margin: 0;
padding: 0;
}
.main-box {
width: 100vw;
height: 100vh;
background-image: url('/static/index/bg.png');
background-size: 100% 100%;
overflow: hidden;
}
.color-font {
font-family: FZCYJ;
color: #E5EFFF;
background: linear-gradient(to bottom, #DAE8FE 30%, #53A0FF 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
</style>

40
src/api.js Normal file
View File

@ -0,0 +1,40 @@
import axios from "axios";
// 创建axios 实例
const instacne = axios.create({
baseURL: "https://ceshi-worker-task.lihaink.cn",
timeout: 30000,
});
// 请求拦截
instacne.interceptors.request.use(
(config) => {
// 在发送请求之前做什么
return config;
},
(err) => {
return Promise.reject(err);
}
);
// 响应拦截
instacne.interceptors.response.use(
(res) => {
// 对响应的数据做什么
return res;
},
(err) => {
return Promise.reject(err);
}
);
export function getConfig(parms) {
return instacne.post('/adminapi/login/account', parms)
}

1
src/assets/vue.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>

After

Width:  |  Height:  |  Size: 496 B

220
src/components/Header.vue Normal file
View File

@ -0,0 +1,220 @@
<template>
<div class="headers">
<div class="logo" style="background-color: red;">
</div>
<div class="right">
<div class="rigth-li" @click="choseArea = true"> <img style="width: 1VW;height:1VW;margin-right: 0.5vw;"
:src="u('DW')" alt=""> 泸县
</div>
<areaList :choseArea="choseArea" @offAreaList="offAreaList"></areaList>
<div class="right-line">
<span></span>
<span></span>
</div>
<div class="rigth-li" id="time">15:33:26</div>
<div class="right-line"> <span></span>
<span></span>
</div>
<div class="rigth-li" id="days">2023-11-28</div>
<div class="right-line">
<span></span>
<span></span>
</div>
<div class="rigth-li" @click="out"><img style="width: 1VW;height:1VW;margin-right: 0.5vw;" :src="u('GJ')"
alt=""></div>
<div class="right-line">
<span></span>
<span></span>
</div>
</div>
</div>
</template>
<script setup>
import { ref, reactive, onMounted, watch } from "vue"
import areaList from "./areaList.vue";
import { useRouter, useRoute } from 'vue-router'
const u = (name) => {
return `/static/index/${name}.png`
}
const router = useRouter()
const route = useRoute()
//
const show = reactive([false, true, true, true, true])
const showFn = (index, src) => {
show.forEach((item, i) => {
show[i] = true
})
show[index] = !show[index]
if (src) {
router.replace(src)
}
}
const backUrl = ref('/')
// alert(zz3)
watch(
() => route.path,
(value, oldValue) => {
if (value == '/') {
showFn(0)
}
if (value == '/commodity') {
showFn(1)
}
if (value == '/Businesses') {
showFn(2)
}
if (value == '/order') {
showFn(3)
}
if (value == '/finance') {
showFn(4)
}
console.log(value)
}
)
//
const choseArea = ref(false)
//
const offAreaList = () => {
choseArea.value = false
}
const out = () => {
//@ts-ignore
window.open("about:blank", "_top").close()
}
const updateTime = () => {
var date = new Date();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
var years = date.getFullYear()
var month = date.getMonth()
var days = date.getDate()
// alert(days)
//
hours = (hours < 10 ? "0" : "") + hours;
minutes = (minutes < 10 ? "0" : "") + minutes;
seconds = (seconds < 10 ? "0" : "") + seconds;
var currentTime = hours + ":" + minutes + ":" + seconds;
var currentDays = years + '-' + (month >= 10 ? month + 1 : "0" + (month + 1)) + "-" + (days >= 10 ? days : "0" + days)
// alert(days)
// DOM
document.getElementById("time").innerHTML = currentTime;
document.getElementById("days").innerHTML = currentDays;
}
onMounted(() => {
setInterval(updateTime, 1000)
})
</script>
<style lang="scss" scoped>
.headers {
display: flex;
color: #B0C7D1;
height: 6vh;
align-items: center;
justify-content: space-between;
background-image: url('/static/index/tit.png');
background-color: #000C14;
background-size: cover;
.right {
display: flex;
font-size: 15px;
margin-right: 30px;
position: relative;
.address {
left: 1vw;
top: 18px;
position: absolute;
width: 8vw;
height: 18vh;
background-color: #001E32;
color: #C7DBE3;
z-index: 9999;
overflow-y: auto;
box-sizing: border-box;
padding: 5px;
.address-li {
padding: 2px 5px;
cursor: pointer;
border-bottom: 0.1px solid #0E293C;
}
}
.address::-webkit-scrollbar {
width: 10px;
background-color: #153041;
}
.address::-webkit-scrollbar-track {
background-color: #153041;
}
::-webkit-scrollbar-thumb {
background-color: #4AB9D0;
border-radius: 5px;
}
.rigth-li {
height: 15px;
line-height: 15px;
padding: 0 10px;
cursor: pointer;
display: flex;
align-items: center;
}
.right-line {
width: 1px;
height: 15px;
display: flex;
flex-direction: column;
justify-content: space-between;
span {
width: 1px;
height: 7px;
background-color: #4BB9D0;
}
}
}
}
.v-enter-active,
.v-leave-active {
transition: opacity 0.5s ease;
}
.v-enter-from,
.v-leave-to {
opacity: 0;
}
</style>

View File

@ -0,0 +1,62 @@
<template>
<Transition>
<div class="address" v-if="props.choseArea">
<div class="address-li" @click="choseTownFn(1)" v-for="( item, index ) in 10 ">泸县</div>
</div>
</Transition>
</template>
<script setup>
import { defineProps, defineEmits } from "vue"
import { useRouter } from 'vue-router'
const router = useRouter()
const emit = defineEmits(['offAreaList'])
const props = defineProps({
choseArea: Boolean,
})
//
const choseTownFn = (id) => {
props.choseArea = false
emit('offAreaList')
// router.replace('/townDetail?id=' + id)
}
</script>
<style lang="scss" scoped>
.address {
left: 1vw;
top: 18px;
position: absolute;
width: 8vw;
height: 18vh;
background-color: #001E32;
color: #C7DBE3;
z-index: 9999;
overflow-y: auto;
box-sizing: border-box;
padding: 5px;
.address-li {
padding: 2px 5px;
cursor: pointer;
border-bottom: 0.1px solid #0E293C;
}
}
.address::-webkit-scrollbar {
width: 10px;
background-color: #153041;
}
.address::-webkit-scrollbar-track {
background-color: #153041;
}
::-webkit-scrollbar-thumb {
background-color: #4AB9D0;
border-radius: 5px;
}
</style>

203
src/components/areaMap.vue Normal file
View File

@ -0,0 +1,203 @@
<template>
<div style="width: 45vw;height: 50vh;" id="myChart"></div>
</template>
<script setup>
import { ref, onMounted } from "vue"
import axios from "axios";
import * as echarts from 'echarts';
import "echarts-gl"
const initCharts = () => {
}
onMounted(() => {
const u = 'https:\/\/ceshi-worker-task.lihaink.cn\/uploads\/images\/20231129\/202311291816106120a4034.png'
var scatterData = [
{
name: "荔湾",
value: [104.679127, 31.467673, 5]
},
// {
// name: "",
// value: [113.211184, 23.39205, 5]
// },
// {
// name: "",
// value: [113.335367, 23.13559, 5]
// },
// {
// name: "",
// value: [113.450761, 23.103239, 5]
// },
// {
// name: "",
// value: [113.53738, 22.794531, 5]
// }
];
var data3d = scatterData.map(el => {
return {
name: el.name,
value: el.value,
}
});
axios.get('https://geo.datav.aliyun.com/areas_v3/bound/510000_full.json')
.then(function (response) {
let mapJson = response.data
let data = mapJson.features.map((item) => {
return {
name: item.properties.name,
};
});
console.log(data, 666)
const myChart = document.getElementById('myChart')
const charts = echarts.init(myChart);
let option = {
geo3D: {
map: "luzhou",
roam: true,
itemStyle: {
color: "#014281",
opacity: 0.9,
borderWidth: 0.4,
borderColor: "#000",
normal: {
areaColor: 'red',
borderWidth: 4, //
borderColor: '#f8911b',
},
emphasis: {
show: false,
// areaColor: '#01215c'
}
// areaColor: '#fff'
},
viewControl: {
autoRotate: true,
autoRotateAfterStill: 3,
distance: 90,
minAlpha: 5, // alpha [ default: 5 ]
maxAlpha: 90, // alpha [ default: 90 ]
minBeta: -360, // beta [ default: -80 ]
maxBeta: 360, // beta [ default: 80 ]
animation: true, // [ default: true ]
animationDurationUpdate: 1000, // [ default: 1000 ]
animationEasingUpdate: "cubicInOut" // [ default: cubicInOut ]
},
emphasis: {
disabled: true, //
label: {
//
show: true,
},
itemStyle: {
color:
"#B17049" //
}
},
label: {
show: true,
// position: "bottom",
color: "white", //
fontSize: 14,
lineHeight: 16,
// textStyle: {
// color: "#fff", //
// fontSize: 12,
// opacity: 1,
// backgroundColor: "red",
// },
},
shading: "lambert",
light: {
//
main: {
// color: "#fff", //
intensity: 0.8, //
shadowQuality: 'high', //
shadow: true, //
shadowQuality: "medium", // ultra //
alpha: 55,
beta: 10
},
ambient: {
intensity: 0.7
}
}
},
series: [
{
type: "scatter3D",
coordinateSystem: "geo3D",
data: data3d,
symbol: "circle",
symbolSize: 20,
itemStyle: {
color: "transparent",
},
label: {
show: true,
position: "top",
distance: -10,
formatter(params) {
return "2";
},
textStyle: {
// color: "transparent",
padding: [15, 20],
backgroundColor: {
image: '/static/index/aa.png',
},
},
},
// emphasis: {
// label: {
// show: true,
// textStyle: {
// backgroundColor: {
// // image: '/static/index/aa.png',
// },
// },
// },
// },
},
],
};
// option.geo.map
echarts.registerMap("luzhou", mapJson)
charts.setOption(option);
})
})
</script>

View File

@ -0,0 +1,472 @@
<template>
<div class="dv-scroll-board" :ref="ref">
<div class="header" v-if="header.length && mergedConfig" :style="mergedConfig.headerStyle">
<div class="header-item" v-for="(headerItem, i) in header" :key="`${headerItem}${i}`" :style="`
height: ${mergedConfig.headerHeight}px;
${headerStyle}
line-height: ${mergedConfig.headerHeight}px;
width: ${widths[i]}px;
`" :align="aligns[i]" v-html="headerItem" />
</div>
<div v-if="mergedConfig" class="rows" :style="`height: ${height - (header.length ? mergedConfig.headerHeight : 0)
}px;`">
<div class="row-item" v-for="(row, ri) in rows" :key="`${row.toString()}${row.scroll}`" :style="`
height: ${heights[ri]}px;
line-height: ${heights[ri]}px;
background-color: ${mergedConfig[row.rowIndex % 2 === 0 ? 'evenRowBGC' : 'oddRowBGC']
};
`">
<div class="ceil" v-for="(ceil, ci) in row.ceils" :key="`${ceil}${ri}${ci}`" :style="`width: ${widths[ci]}px;`"
:align="aligns[ci]" v-html="ceil" @click="emitEvent('click', ri, ci, row, ceil)"
@mouseenter="handleHover(true, ri, ci, row, ceil)" @mouseleave="handleHover(false)" />
</div>
</div>
</div>
</template>
<script>
import autoResize from "@jiaminghi/data-view/lib/mixin/autoResize";
import { deepMerge } from "@jiaminghi/charts/lib/util/index";
import { deepClone } from "@jiaminghi/c-render/lib/plugin/util";
export default {
name: "DvScrollBoard",
mixins: [autoResize],
props: {
config: {
type: Object,
default: () => ({}),
},
},
data() {
return {
ref: "scroll-board",
defaultConfig: {
/**
* @description Board header
* @type {Array<String>}
* @default header = []
* @example header = ['column1', 'column2', 'column3']
*/
headerStyle: "",
header: [],
/**
* @description Board data
* @type {Array<Array>}
* @default data = []
*/
data: [],
/**
* @description Row num
* @type {Number}
* @default rowNum = 5
*/
rowNum: 5,
/**
* @description Header background color
* @type {String}
* @default headerBGC = '#00BAFF'
*/
headerBGC: "#00BAFF",
/**
* @description Odd row background color
* @type {String}
* @default oddRowBGC = '#003B51'
*/
oddRowBGC: "#003B51",
/**
* @description Even row background color
* @type {String}
* @default evenRowBGC = '#003B51'
*/
evenRowBGC: "#0A2732",
/**
* @description Scroll wait time
* @type {Number}
* @default waitTime = 2000
*/
waitTime: 2000,
/**
* @description Header height
* @type {Number}
* @default headerHeight = 35
*/
headerHeight: 35,
/**
* @description Column width
* @type {Array<Number>}
* @default columnWidth = []
*/
columnWidth: [],
/**
* @description Column align
* @type {Array<String>}
* @default align = []
* @example align = ['left', 'center', 'right']
*/
align: [],
/**
* @description Show index
* @type {Boolean}
* @default index = false
*/
index: false,
/**
* @description index Header
* @type {String}
* @default indexHeader = '#'
*/
indexHeader: "#",
/**
* @description Carousel type
* @type {String}
* @default carousel = 'single'
* @example carousel = 'single' | 'page'
*/
carousel: "single",
/**
* @description Pause scroll when mouse hovered
* @type {Boolean}
* @default hoverPause = true
* @example hoverPause = true | false
*/
hoverPause: true,
},
mergedConfig: null,
header: [],
headerStyle: "",
rowsData: [],
rows: [],
widths: [],
heights: [],
avgHeight: 0,
aligns: [],
animationIndex: 0,
animationHandler: "",
updater: 0,
needCalc: false,
};
},
watch: {
config() {
const { stopAnimation, calcData } = this;
stopAnimation();
this.animationIndex = 0;
calcData();
},
},
methods: {
handleHover(enter, ri, ci, row, ceil) {
const { mergedConfig, emitEvent, stopAnimation, animation } = this;
if (enter) emitEvent("mouseover", ri, ci, row, ceil);
if (!mergedConfig.hoverPause) return;
if (enter) {
stopAnimation();
} else {
animation(true);
}
},
afterAutoResizeMixinInit() {
const { calcData } = this;
calcData();
},
onResize() {
const { mergedConfig, calcWidths, calcHeights } = this;
if (!mergedConfig) return;
calcWidths();
calcHeights();
},
calcData() {
const { mergeConfig, calcHeaderData, calcRowsData } = this;
mergeConfig();
calcHeaderData();
calcRowsData();
const { calcWidths, calcHeights, calcAligns } = this;
calcWidths();
calcHeights();
calcAligns();
const { animation } = this;
animation(true);
},
mergeConfig() {
let { config, defaultConfig } = this;
this.mergedConfig = deepMerge(
deepClone(defaultConfig, true),
config || {}
);
},
calcHeaderData() {
let { header, index, indexHeader } = this.mergedConfig;
if (!header.length) {
this.header = [];
return;
}
header = [...header];
if (index) header.unshift(indexHeader);
this.header = header;
},
calcRowsData() {
let { data, index, headerBGC, rowNum } = this.mergedConfig;
if (index) {
data = data.map((row, i) => {
row = [...row];
const indexTag = `<span class="index" style="background-color: ${headerBGC};">${i + 1
}</span>`;
row.unshift(indexTag);
return row;
});
}
data = data.map((ceils, i) => ({ ceils, rowIndex: i }));
const rowLength = data.length;
if (rowLength > rowNum && rowLength < 2 * rowNum) {
data = [...data, ...data];
}
data = data.map((d, i) => ({ ...d, scroll: i }));
this.rowsData = data;
this.rows = data;
},
calcWidths() {
const { width, mergedConfig, rowsData } = this;
const { columnWidth, header } = mergedConfig;
const usedWidth = columnWidth.reduce((all, w) => all + w, 0);
let columnNum = 0;
if (rowsData[0]) {
columnNum = rowsData[0].ceils.length;
} else if (header.length) {
columnNum = header.length;
}
const avgWidth = (width - usedWidth) / (columnNum - columnWidth.length);
const widths = new Array(columnNum).fill(avgWidth);
this.widths = deepMerge(widths, columnWidth);
},
calcHeights(onresize = false) {
const { height, mergedConfig, header } = this;
const { headerHeight, rowNum, data } = mergedConfig;
let allHeight = height;
if (header.length) allHeight -= headerHeight;
const avgHeight = allHeight / rowNum;
this.avgHeight = avgHeight;
if (!onresize) this.heights = new Array(data.length).fill(avgHeight);
},
calcAligns() {
const { header, mergedConfig } = this;
const columnNum = header.length;
let aligns = new Array(columnNum).fill("left");
const { align } = mergedConfig;
this.aligns = deepMerge(aligns, align);
},
async animation(start = false) {
const { needCalc, calcHeights, calcRowsData } = this;
if (needCalc) {
calcRowsData();
calcHeights();
this.needCalc = false;
}
let {
avgHeight,
animationIndex,
mergedConfig,
rowsData,
animation,
updater,
} = this;
const { waitTime, carousel, rowNum } = mergedConfig;
const rowLength = rowsData.length;
if (rowNum >= rowLength) return;
if (start) {
await new Promise((resolve) => setTimeout(resolve, waitTime));
if (updater !== this.updater) return;
}
const animationNum = carousel === "single" ? 1 : rowNum;
let rows = rowsData.slice(animationIndex);
rows.push(...rowsData.slice(0, animationIndex));
this.rows = rows.slice(0, carousel === "page" ? rowNum * 2 : rowNum + 1);
this.heights = new Array(rowLength).fill(avgHeight);
await new Promise((resolve) => setTimeout(resolve, 300));
if (updater !== this.updater) return;
this.heights.splice(0, animationNum, ...new Array(animationNum).fill(0));
animationIndex += animationNum;
const back = animationIndex - rowLength;
if (back >= 0) animationIndex = back;
this.animationIndex = animationIndex;
this.animationHandler = setTimeout(animation, waitTime - 300);
},
stopAnimation() {
const { animationHandler, updater } = this;
this.updater = (updater + 1) % 999999;
if (!animationHandler) return;
clearTimeout(animationHandler);
},
emitEvent(type, ri, ci, row, ceil) {
const { ceils, rowIndex } = row;
this.$emit(type, {
row: ceils,
ceil,
rowIndex,
columnIndex: ci,
});
},
updateRows(rows, animationIndex) {
const { mergedConfig, animationHandler, animation } = this;
this.mergedConfig = {
...mergedConfig,
data: [...rows],
};
this.needCalc = true;
if (typeof animationIndex === "number")
this.animationIndex = animationIndex;
if (!animationHandler) animation(true);
},
},
destroyed() {
const { stopAnimation } = this;
stopAnimation();
},
};
</script>
<style>
.dv-scroll-board {
position: relative;
width: 100%;
height: 100%;
color: #fff;
}
.dv-scroll-board .text {
padding: 0 10px;
box-sizing: border-box;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.dv-scroll-board .header {
display: flex;
flex-direction: row;
font-size: 14px;
/* background-color: red; */
}
.dv-scroll-board .header .header-item {
padding: 0 10px;
box-sizing: border-box;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
transition: all 0.3s;
}
.dv-scroll-board .rows {
overflow: hidden;
}
.dv-scroll-board .rows .row-item {
display: flex;
font-size: 13px;
transition: all 0.3s;
margin: 5px 0;
}
.dv-scroll-board .rows .ceil {
padding: 0 10px;
box-sizing: border-box;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.dv-scroll-board .rows .index {
border-radius: 3px;
padding: 0px 3px;
}
</style>

View File

@ -0,0 +1,100 @@
<template>
<div class="warn-box">
<div class="offWarn" @click="emit('off')">关闭</div>
<div class="box-top">
<img :src="u" style="width: 5vw;height: 4.5vw;" alt="">
<div style="display: flex;justify-content: space-between;flex-direction: column;margin-left: 1vw;">
<div style="font-family:FZCYJ ;">告警数据:</div>
<div class="warn-li"> <img src="/static/index/PM.png" class="pm-img"> <span class="pm-num">1</span>
<span class="text"> 这是一名jiujs</span>
</div>
<div class="warn-li"> <img src="/static/index/PM.png" class="pm-img"> <span class="pm-num"> 2</span>
<span class="text"> 这是一名jiujs发射点发射点点大夫</span>
</div>
<div class="warn-li"> <img src="/static/index/PM.png" class="pm-img"> <span class="pm-num">3</span> <span
class="text"> 这是一名jiujs啊沙发沙发沙发沙发沙发阿松大沙sdsa发</span>
</div>
</div>
</div>
<div class="box-bottom">
<div style="font-family: FZCYJ;">告警原因</div>
<div class="text" style="width: 10vw;">这地方时间回到房间和第三方季后赛得分</div>
<div style="font-family: FZCYJ;margin-top: 1vh;">建议解决方案</div>
<div class="settle text">实打实的技术的开发和迪斯科飞机还是打开非官方的离开国家队联发科更健康</div>
</div>
</div>
</template>
<style lang="scss" scoped>
.warn-box {
width: 91%;
top: 8.5vh;
height: 21vh;
z-index: 1;
position: absolute;
// margin-left: 1%;
backdrop-filter: blur(4px);
background-color: rgba(14, 53, 113, 0.6);
box-sizing: border-box;
padding: 2vh;
.offWarn {
position: absolute;
right: 1vh;
cursor: pointer;
}
.box-top {
display: flex;
height: 4.5lvw;
.warn-li {
position: relative;
display: flex;
width: 15vw;
align-items: center;
.pm-img {
position: absolute;
width: 1vw;
height: 1vw;
}
.pm-num {
font-family: FZCYJ;
// margin: 0 5px;
margin-left: 0.3vw;
margin-right: 0.5vw;
}
}
}
.box-bottom {
margin-top: 1vh;
}
.text {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: 12px;
}
}
</style>
<script setup>
import { ref, reactive, defineEmits } from "vue"
const u = ref('https:\/\/ceshi-worker-task.lihaink.cn\/uploads\/images\/20231129\/202311291816106120a4034.png')
const emit = defineEmits(['off'])
</script>

175
src/components/warnPop.vue Normal file
View File

@ -0,0 +1,175 @@
<template>
<div class="box">
<div class="btn" @click="off">关闭</div>
<div class="l">
<div style="position: relative;padding-top: 5px;">
<div style="position: absolute;top: 0;">
土壤温度已预警 <span style="color: #B7555A;">10</span>
</div>
<div class="t" style="width: 15vw;" id="l_t"></div>
</div>
<div style="position: relative;padding-top: 5px;">
<div style="position: absolute;top: 0;">
土壤湿度已预警 <span style="color: #B7555A;">10</span>
</div>
<div class="t" id="l_c"></div>
</div>
<!-- <div class="l-c"></div> -->
<div style="position: relative;padding-top: 5px;">
<div style="position: absolute;top: 0;">
土壤PH值 已预警 <span style="color: #B7555A;">10</span>
</div>
<div class="t" id="l_b"></div>
</div>
</div>
<div class="c">
<div>
<div style="position: absolute;top: 0;">
土壤氮磷钾 已预警 <span style="color: #B7555A;">10</span>
</div>
<div class="c-t" id="c_t"></div>
</div>
<div class="c-b">
<div style="position: absolute;top: 0;left: 5vw;">
土壤PH值 已预警 <span style="color: #B7555A;">10</span>
</div>
<div id="c_b" style="width: 100%;height: 100%;"></div>
</div>
</div>
<div class="l">
<div style="position: relative;padding-top: 5px;">
<div style="position: absolute;top: 0;">
环境温度已预警 <span style="color: #B7555A;">10</span>
</div>
<div class="t" style="width: 14vw;" id="r_t"></div>
</div>
<div style="position: relative;padding-top: 5px;">
<div style="position: absolute;top: 0;">
环境湿度已预警 <span style="color: #B7555A;">10</span>
</div>
<div class="t" id="r_c"></div>
</div>
<!-- <div class="l-c"></div> -->
<div style="position: relative;padding-top: 5px;">
<div style="position: absolute;top: 0;">
二氧化碳 已预警 <span style="color: #B7555A;">10</span>
</div>
<div class="t" id="r_b"></div>
</div>
</div>
</div>
</template>
<style lang="scss" scoped>
.box {
position: absolute;
width: 47vw;
top: 9vh;
height: 19vh;
color: white;
font-size: 12px;
z-index: 1;
display: flex;
justify-content: space-between;
backdrop-filter: blur(4px);
background-color: rgba(14, 53, 113, 0.6);
overflow: hidden;
.btn {
position: absolute;
right: 4px;
cursor: pointer;
z-index: 2;
}
.l {
height: 100%;
margin-right: 1vw;
margin-left: 1vw;
.t {
width: 100%;
height: 6.5vh;
transform: translate(-2.5vw, 0.5vh);
}
}
.c {
width: 14vw;
height: 100%;
margin-right: 1vw;
.c-t {
transform: translate(-5VW, 0vh);
width: 20vw;
height: 15vh;
}
.c-b {
transform: translate(-5vw, -3.1vh);
position: relative;
width: 20vw;
height: 10vh;
}
}
.r {
width: 14vw;
height: 100%;
background-color: white;
margin-right: 1vw;
}
}
</style>
<script setup>
import options from "@/view/option"
import * as echarts from 'echarts';
import { ref, reactive, onMounted, defineEmits } from "vue"
const emit = defineEmits(['off'])
const off = () => {
emit('off')
}
//
const initCharts = (tag, option) => {
var chartDom = document.getElementById(tag);
var myChart = echarts.init(chartDom);
myChart.setOption(option);
}
onMounted(() => {
document.getElementById("l_t").removeAttribute('_echarts_instance_');
document.getElementById("l_c").removeAttribute('_echarts_instance_');
document.getElementById("l_b").removeAttribute('_echarts_instance_');
document.getElementById("c_t").removeAttribute('_echarts_instance_');
document.getElementById("c_b").removeAttribute('_echarts_instance_');
document.getElementById("r_t").removeAttribute('_echarts_instance_');
document.getElementById("r_c").removeAttribute('_echarts_instance_');
document.getElementById("r_b").removeAttribute('_echarts_instance_');
initCharts('l_t', options.plant_temp)
initCharts('l_c', options.plant_temp)
initCharts('l_b', options.plant_temp)
initCharts('c_t', options.CKP)
initCharts('c_b', options.plant_temp)
initCharts('r_t', options.plant_temp)
initCharts('r_c', options.plant_temp)
initCharts('r_b', options.plant_temp)
// initCharts('offline', options.offLine)
})
</script>

32
src/main.js Normal file
View File

@ -0,0 +1,32 @@
import { createApp } from 'vue'
import App from './App.vue'
import dataV from '@jiaminghi/data-view'
import router from "./router";
import 'amfe-flexible'
const app = createApp(App)
app.use(router)
app.use(dataV)
app.mount('#app')
// chartMap() {
// var myChart = echarts.init(document.getElementById("mapEchart"));
// echarts.registerMap("zhejiang", geoJson);
// myChart.hideLoading();
// // 图表配置项
// myChart.setOption(option);
// }

23
src/router/index.js Normal file
View File

@ -0,0 +1,23 @@
import { createRouter, createWebHistory } from 'vue-router'
const routes = [
{
path: '/',
name: 'index',
component: () => import('@/view/index.vue'),
},
{
path: '/detail',
name: 'detail',
component: () => import('@/view/detail.vue'),
},
]
const router = createRouter({
history: createWebHistory(),
routes
})
export default router

83
src/style.css Normal file
View File

@ -0,0 +1,83 @@
:root {
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
line-height: 1.5;
font-weight: 400;
color-scheme: light dark;
color: rgba(255, 255, 255, 0.87);
background-color: #242424;
font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
a {
font-weight: 500;
color: #646cff;
text-decoration: inherit;
}
a:hover {
color: #535bf2;
}
body {
margin: 0;
display: flex;
place-items: center;
min-width: 320px;
min-height: 100vh;
}
h1 {
font-size: 3.2em;
line-height: 1.1;
}
button {
border-radius: 8px;
border: 1px solid transparent;
padding: 0.6em 1.2em;
font-size: 1em;
font-weight: 500;
font-family: inherit;
background-color: #1a1a1a;
cursor: pointer;
transition: border-color 0.25s;
}
button:hover {
border-color: #646cff;
}
button:focus,
button:focus-visible {
outline: 4px auto -webkit-focus-ring-color;
}
.card {
padding: 2em;
}
#app {
max-width: 1280px;
margin: 0 auto;
padding: 0;
text-align: center;
}
@media (prefers-color-scheme: light) {
:root {
color: #213547;
background-color: #ffffff;
}
a:hover {
color: #747bff;
}
button {
background-color: #f9f9f9;
}
}
*{
margin: 0;
padding: 0;
}

529
src/view/detail.vue Normal file
View File

@ -0,0 +1,529 @@
<template>
<div class="box">
<div class="l">
<div class="top">
<div style="display: flex;justify-content: space-between;align-items: center;">
<span>种植总面积</span>
<div>
<span class="area-num "><span class="color-font">2</span> </span>
<span class="area-num "><span class="color-font">2</span> </span>
<span class="area-num "><span class="color-font">2</span> </span>
<span class="area-num "><span class="color-font">2</span> </span>
</div>
</div>
<div style="">种植种类</div>
<div>
<div class="lands">
<div class="land" v-for="(item, index) in 33" :key="index">地块</div>
</div>
</div>
</div>
<div class="bottom top">
<warnDetail v-if="showWarnDeatil" @off="showWarnDeatil = false"></warnDetail>
<scrollTable @click="hdClick3" :config="config3" style="width:100%;height:100%"></scrollTable>
</div>
<div class="top center">
<video style="margin-top: 1vh;width: 100%;height: 100%;" autoplay muted
src="http://192.168.1.27/live/test.live.mp4?secret=gqig2yFKkDpIMic1uWZY1L5MsIo0eflm">
</video>
</div>
</div>
<div class="c">
<div class="top">
</div>
<div class="bottom">
<div class="bottom-li" :class="(item.flag) ? 'act' : ''" v-for="(item, index) in environmentData">
<span class="color-font">{{ item.name }}</span>
<span>{{ item.value }}{{ item.unit }}</span>
<span v-if="item.flag">状态正常</span>
<span v-else>状态正常</span>
</div>
</div>
</div>
<div class="r">
<div class="center top">
<div>监控设备总数: <span class="num">1528</span> </div>
<div class="cont">
<div style="display: flex;justify-content: space-between;align-items: center;margin-top: 3vh;">
<img src="/static/index/JYZ.png" style="width: 2.8vw; height: 4vw;" alt="">
<div class="circle">
<img src="/static/detail/bk.png" class="act-img" alt="">
<div style="width: 110px;height: 110px;" class="online" id="online"></div>
</div>
<div class="circle">
<img src="/static/detail/bk.png" class="act-img" alt="">
<div style="width: 110px;height: 110px;" class="online" id="offline"></div>
</div>
<img src="/static/index/JTY.png" style="width: 2.8vw; height: 4vw;" alt="">
</div>
<div class="eqNum">
<div>
<img src="/static/index/Q.png" alt="" style="transform: translateY(2px);"> 在线设备统计<span
class="num" style="margin-left: 10px;">1418</span>
</div>
<div>
<img src="/static/index/Q.png" style="transform: translateY(2px);"> 离线设备统计<span class="num"
style="margin-left: 10px;">1418</span>
</div>
</div>
</div>
</div>
<div class="bottom">
<div class="r-b-li" :class="item.flag ? '' : 'act'" v-for="(item, index) in MoistureData" :key="index">
<span style="color: azure;">{{ item.name }}</span>
<span>{{ item.value }} {{ item.unit }}</span>
<span v-if="item.flag">状态正常</span>
<span v-else>状态异常</span>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { ref, reactive, onMounted } from "vue"
import scrollTable from "@/components/scrollTable.vue"
import options from "./option"
import * as echarts from 'echarts';
import warnDetail from "@/components/warnDetail.vue"
import { useRouter } from "vue-router";
const router = useRouter()
const u = ref('https:\/\/ceshi-worker-task.lihaink.cn\/uploads\/images\/20231129\/202311291816106120a4034.png')
const alignFn = (num) => {
let arr = []
for (let i = 0; i < num; i++) {
arr.push('center')
}
return arr
}
const environmentData = reactive([
{
name: "风速",
value: 10,
unit: "m/s",
flag: true
},
{
name: "风向",
value: 10,
unit: "",
flag: false
},
{
name: "环境湿度",
value: 10,
unit: "%",
flag: false
},
{
name: "环境温度",
value: 10,
unit: "℃",
flag: false
},
{
name: "二氧化碳",
value: 10,
unit: "ppm",
flag: true
},
{
name: "环境气压",
value: 10,
unit: "pa",
flag: true
},
{
name: "雨量",
value: 10,
unit: "mm/h",
flag: false
},
{
name: "环境光照",
value: 10,
unit: "%",
flag: true
},
])
const MoistureData = reactive([
{
name: "土壤温度",
value: 12,
unit: "℃",
flag: true
}, {
name: "土壤湿度",
value: 12,
unit: "℃",
flag: false
}, {
name: "土壤电导率",
value: 12,
unit: "ps/cm",
flag: true
}, {
name: "土壤PH值",
value: 4,
unit: "",
flag: true
}, {
name: "土壤含氮量",
value: 12,
unit: "",
flag: false
}, {
name: "土壤含磷量",
value: 12,
unit: "",
flag: false
},
{
name: "土壤含钾量",
value: 12,
unit: "",
flag: true
},
])
const config3 = reactive({
header: ['产品名称', '溯源码', '产品名称', '溯源码',],
headerBGC: "#092757",
oddRowBGC: "#0C2045",
headerStyle: "background-image: url('/static/index/SBGJBG.png');font-family: FZCYJ;background-size: 100% 100%;",
align: alignFn(4),
data: [
['行1列1', '行1列2', '行1列3', `<span style="color:#2562AD"> 详情 </span>`,],
['行1列1', '行1列2', '行1列3', `<span style="color:#2562AD"> 详情 </span>`,],
['行1列1', '行1列2', '行1列3', `<span style="color:#2562AD"> 详情 </span>`,],
['行1列1', '行1列2', '行1列3', `<span style="color:#2562AD"> 详情 </span>`,],
['行1列1', '行1列2', '行1列3', `<span style="color:#2562AD"> 详情 </span>`,],
['行1列1', '行1列2', '行1列3', `<span style="color:#2562AD"> 详情 </span>`,],
['行1列1', '行1列2', '行1列3', `<span style="color:#2562AD"> 详情 </span>`,],
]
})
const showWarnDeatil = ref(false)
const hdClick3 = (e) => {
if (e.ceil) {
if (e.columnIndex == 3) {
showWarnDeatil.value = true
}
}
}
//
const initCharts = (tag, option) => {
var chartDom = document.getElementById(tag);
var myChart = echarts.init(chartDom);
myChart.setOption(option);
}
const test = () => {
router.replace('/detail')
}
onMounted(() => {
initCharts('online', options.onLine)
initCharts('offline', options.offLine)
})
</script>
<style lang="scss">
.box {
width: 100vw;
height: 93vh;
margin-top: 1vh;
display: flex;
justify-content: space-between;
.l {
width: 25vw;
height: 93vh;
.top {
width: 25vw;
height: 30vh;
background-size: 100% 100%;
// background-color: pink;
background-image: url('/static/index/SBGJTJ.png');
margin-top: 1vh;
box-sizing: border-box;
padding: 6vh 2vh 1vh 2vh;
color: #E5EFFF;
.area-num {
margin-right: 10px;
width: 35px;
height: 40px;
background-image: url("/static/detail/numbg.png");
display: inline-block;
background-size: 100% 100%;
font-size: 30px;
text-align: center;
}
.lands {
display: flex;
flex-wrap: wrap;
height: 100%;
justify-content: space-between;
font-size: 14px;
overflow-y: auto;
margin-top: 1vh;
height: 15vh;
.land {
width: 5vw;
height: 3vh;
// background-color: #fff;
background-image: url('/static/detail/ZL.png');
background-size: 100% 100%;
color: white;
text-align: center;
line-height: 3vh;
}
}
.lands::-webkit-scrollbar {
width: 10px;
background-color: #153041;
}
.lands::-webkit-scrollbar-track {
background-color: #153041;
}
::-webkit-scrollbar-thumb {
background-color: #15A1DC;
border-radius: 5px;
}
}
.center {
background-image: url("/static/detail/MQJk.png");
}
.bottom {
position: relative;
}
}
.c {
width: 49vw;
height: 93vh;
.top {
margin-top: 1vh;
width: 49vw;
height: 61vh;
}
.bottom {
width: 49vw;
height: 30vh;
margin-top: 1vh;
background-image: url('/static/detail/QXHJJC.png');
background-size: 100% 100%;
box-sizing: border-box;
padding: 6vh 1vh 1vh 2vh;
position: relative;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.bottom-li {
// background-color: #fff;
width: 49%;
height: 4vh;
display: flex;
box-sizing: border-box;
justify-content: space-between;
// border: 1px solid red;
background-image: url('/static/detail/ZC.png');
background-size: 100% 100%;
align-items: center;
font-size: 16px;
color: #E5EFFF;
font-family: FZCYJ;
padding: 0 1VW;
}
.act {
background-image: url('/static/detail/YC.png');
color: #C65956;
}
}
}
.r {
width: 25vw;
height: 93vh;
.bottom {
width: 25vw;
box-sizing: border-box;
padding: 5vh 1vh 1.5vh;
height: 61vh;
background-size: 100% 100%;
background-image: url('/static/detail/TRSQ.png');
margin-top: 1vh;
display: flex;
justify-content: space-between;
flex-direction: column;
align-items: center;
.r-b-li {
width: 95%;
height: 7.5vh;
background-image: url('/static/detail/SQBG.png');
background-size: 100% 100%;
color: white;
font-family: FZCYJ;
display: flex;
justify-content: space-between;
align-items: center;
box-sizing: border-box;
padding: 0 1.5VW;
font-size: 14PX;
}
.act {
color: #C55956;
}
}
.top {
width: 25vw;
height: 30vh;
padding: 2vh;
box-sizing: border-box;
background-size: 100% 100%;
background-image: url('/static/index/YJCP.png');
margin-top: 1vh;
padding-top: 6vh;
color: #E5EFFF;
}
.center {
background-image: url('/static/index/JCSBSLTJ.png');
.num {
font-size: 20px;
font-family: FZCYJ;
color: #E5EFFF;
background: linear-gradient(to bottom, #DAE8FE 30%, #53A0FF 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
margin-left: 30px;
}
.cont {
height: 70%;
.eqNum {
margin-top: 2vh;
display: flex;
justify-content: space-around;
font-size: 11px;
background-image: url('/static/index/BTBG.png');
background-size: 100% 100%;
}
.circle {
width: 120px;
height: 120px;
position: relative;
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.act-img {
position: absolute;
width: 100%;
height: 100%;
animation: spin 2s linear infinite;
left: -0%;
top: 0%;
}
}
.online {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
}
}
}
}
</style>

484
src/view/index.vue Normal file
View File

@ -0,0 +1,484 @@
<template>
<div class="box">
<div class="l">
<div class="top">
<warnDetail v-if="showWarnDeatil" @off="showWarnDeatil = false"></warnDetail>
<scrollTable @click="hdClick3" :config="config3" style="width:100%;height:100%"></scrollTable>
</div>
<div class="center top">
<div>监控设备总数: <span class="num color-font">1528</span> </div>
<div class="cont">
<div style="display: flex;justify-content: space-between;align-items: center;margin-top: 3vh;">
<img src="/static/index/JYZ.png" style="width: 2.8vw; height: 4vw;" alt="">
<div class="circle">
<img src="/static/detail/bk.png" class="act-img" alt="">
<div style="width: 110px;height: 110px;" class="online" id="online"></div>
</div>
<div class="circle">
<img src="/static/detail/bk.png" class="act-img" alt="">
<div style="width: 110px;height: 110px;" class="online" id="offline"></div>
</div>
<img src="/static/index/JTY.png" style="width: 2.8vw; height: 4vw;" alt="">
</div>
<div class="eqNum">
<div>
<img src="/static/index/Q.png" alt="" style="transform: translateY(2px);"> 在线设备统计<span
class="num color-font" style="margin-left: 10px;">1418</span>
</div>
<div>
<img src="/static/index/Q.png" style="transform: translateY(2px);"> 离线设备统计<span
class="num color-font" style="margin-left: 10px;">1418</span>
</div>
</div>
</div>
</div>
<div class="bottom top">
<scrollTable :config="config2" style="width:100%;height:100%"></scrollTable>
</div>
</div>
<div class="c">
<div class="top">
<div class="c-top-tit">
<div class="c-top-li">种植面积 <span class="color-font"
style="font-size: 18px;margin-left: 1vw; ">45454</span> m</div>
<div class="c-top-li">种植种类 <span class="color-font"
style="font-size: 18px;margin-left: 1vw; ">45454</span> </div>
<div class="c-top-li">地块数量 <span class="color-font"
style="font-size: 18px;margin-left: 1vw; ">45454</span> </div>
</div>
<div class="map">
<areaMap></areaMap>
</div>
</div>
<div class="bottom">
<warnPop v-if="showWarnPop" ref="ChildsDom" @off="showWarnPop = false"></warnPop>
<scrollTable :config="config" @click="hdClick" style="width:100%;height:100%"></scrollTable>
</div>
</div>
<div class="r">
<div class="top">
<div class="content" id="eq">
<div class="eq" v-for="item in 10" :key="item">
<img :src="u" style="width:8vw;height: 100%;border-radius: 1vh;" alt="">
<div
style="display: flex;flex-direction: column;justify-content: space-between;margin-left: 1vw;color: #CAD5E5;">
<div style="display: flex;align-items: center;">
<img src="/static/index/MC.png" style="width:1.5vw;height: 1.5vw;margin-right: 5px; "
alt="">
张伟
</div>
<div style="display: flex;align-items: center;">
<img src="/static/index/MC.png" style="width:1.5vw;height: 1.5vw;margin-right: 5px; "
alt="">
这是一名后端开发
</div>
</div>
</div>
</div>
</div>
<div class="bottom">
<div style="height: 35%;">
<div class="lands">
<div class="land" v-for="(item, index) in 16" @click="test" :key="index">地块</div>
</div>
</div>
<div class="video" style="height: 65%;">
<div class="video-tit"> 实时监测影像 </div>
<video style="margin-top: 1vh;width: 100%;height: 100%;" autoplay muted
src="http://192.168.1.27/live/test.live.mp4?secret=gqig2yFKkDpIMic1uWZY1L5MsIo0eflm">
</video>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { ref, reactive, onMounted } from "vue"
import scrollTable from "@/components/scrollTable.vue"
import options from "./option"
import * as echarts from 'echarts';
import warnPop from "@/components/warnPop.vue"
import warnDetail from "@/components/warnDetail.vue"
import { useRouter } from "vue-router";
import areaMap from "@/components/areaMap.vue"
const router = useRouter()
const u = ref('https:\/\/ceshi-worker-task.lihaink.cn\/uploads\/images\/20231129\/202311291816106120a4034.png')
const alignFn = (num) => {
let arr = []
for (let i = 0; i < num; i++) {
arr.push('center')
}
return arr
}
const config = reactive({
header: ['地块名称', '土壤温度', '土壤湿度', '土壤PH值', '土壤氮磷钾', '风速', '环境温度', '环境湿度', '二氧化碳', '历史预警数据'],
headerBGC: "#092757",
headerStyle: "background-image: url('/static/index/tableHead.png');font-family: FZCYJ;background-size: 100% 100%;",
oddRowBGC: "#0C2045",
align: alignFn(10),
data: [
['行1列1', '行1列2', '行1列3', '行1列1', '行1列2', '行1列3', '行1列1', '行1列2', '行1列3', `<span style='color:#2562AD' > 查看<span>`],
['行1列1', '行1列2', '行1列3', '行1列1', '行1列2', '行1列3', '行1列1', '行1列2', '行1列3', `<span style='color:#2562AD' > 查看<span>`],
['行1列1', '行1列2', '行1列3', '行1列1', '行1列2', '行1列3', '行1列1', '行1列2', '行1列3', `<span style='color:#2562AD' > 查看<span>`],
['行1列1', '行1列2', '行1列3', '行1列1', '行1列2', '行1列3', '行1列1', '行1列2', '行1列3', `<span style='color:#2562AD' > 查看<span>`],
['行1列1', '行1列2', '行1列3', '行1列1', '行1列2', '行1列3', '行1列1', '行1列2', '行1列3', `<span style='color:#2562AD' > 查看<span>`],
['行1列1', '行1列2', '行1列3', '行1列1', '行1列2', '行1列3', '行1列1', '行1列2', '行1列3', `<span style='color:#2562AD' > 查看<span>`],
['行1列1', '行1列2', '行1列3', '行1列1', '行1列2', '行1列3', '行1列1', '行1列2', '行1列3', `<span style='color:#2562AD' > 查看<span>`],
]
})
const config2 = reactive({
header: ['产品名称', '溯源码', '产品名称', '溯源码',],
headerBGC: "#092757",
oddRowBGC: "#0C2045",
headerStyle: "background:#0E316B",
align: alignFn(4),
data: [
['行1列1', '行1列2', '行1列3', '行1列1',],
['行1列1', '行1列2', '行1列3', '行1列1',],
['行1列1', '行1列2', '行1列3', '行1列1',],
['行1列1', '行1列2', '行1列3', '行1列1',],
['行1列1', '行1列2', '行1列3', '行1列1',],
['行1列1', '行1列2', '行1列3', '行1列1',],
['行1列1', '行1列2', '行1列3', '行1列1',],
]
})
const config3 = reactive({
header: ['产品名称', '溯源码', '产品名称', '溯源码',],
headerBGC: "#092757",
oddRowBGC: "#0C2045",
headerStyle: "background-image: url('/static/index/SBGJBG.png');font-family: FZCYJ;background-size: 100% 100%;",
align: alignFn(4),
data: [
['行1列1', '行1列2', '行1列3', `<span style="color:#2562AD"> 详情 </span>`,],
['行1列1', '行1列2', '行1列3', `<span style="color:#2562AD"> 详情 </span>`,],
['行1列1', '行1列2', '行1列3', `<span style="color:#2562AD"> 详情 </span>`,],
['行1列1', '行1列2', '行1列3', `<span style="color:#2562AD"> 详情 </span>`,],
['行1列1', '行1列2', '行1列3', `<span style="color:#2562AD"> 详情 </span>`,],
['行1列1', '行1列2', '行1列3', `<span style="color:#2562AD"> 详情 </span>`,],
['行1列1', '行1列2', '行1列3', `<span style="color:#2562AD"> 详情 </span>`,],
]
})
//
const initCharts = (tag, option) => {
var chartDom = document.getElementById(tag);
var myChart = echarts.init(chartDom);
myChart.setOption(option);
}
const ChildsDom = ref(null);
const showWarnPop = ref(false)
const hdClick = (e) => {
// console.log(e)
if (e.ceil) {
if (e.columnIndex == 9) {
showWarnPop.value = true
}
}
}
const showWarnDeatil = ref(false)
const hdClick3 = (e) => {
if (e.ceil) {
if (e.columnIndex == 3) {
// showWarnPop.value = true
showWarnDeatil.value = true
}
}
}
const test = () => {
router.replace('/detail')
}
const scrollTableFn = () => {
const tag = document.getElementById('eq')
const height = tag.scrollHeight
setInterval(() => {
tag.scrollTop += 1
if ((tag.scrollTop + tag.clientHeight) >= height - 50) {
tag.scrollTop = 0
}
}, 50)
}
onMounted(() => {
scrollTableFn()
initCharts('online', options.onLine)
initCharts('offline', options.offLine)
})
</script>
<style lang="scss">
.box {
width: 100vw;
height: 93vh;
margin-top: 1vh;
display: flex;
justify-content: space-between;
.l {
width: 25vw;
height: 93vh;
.top {
width: 25vw;
height: 30vh;
background-size: 100% 100%;
// background-color: pink;
background-image: url('/static/index/SBGJTJ.png');
margin-top: 1vh;
box-sizing: border-box;
padding: 6vh 2vh 1vh 2vh;
color: white;
font-size: 14px;
position: relative;
}
.center {
background-image: url('/static/index/JCSBSLTJ.png');
.num {
font-size: 20px;
// font-family: FZCYJ;
// color: #E5EFFF;
// background: linear-gradient(to bottom, #DAE8FE 30%, #53A0FF 100%);
// -webkit-background-clip: text;
// -webkit-text-fill-color: transparent;
// margin-left: 30px;
}
.cont {
height: 70%;
.eqNum {
margin-top: 2vh;
display: flex;
justify-content: space-around;
font-size: 11px;
background-image: url('/static/index/BTBG.png');
background-size: 100% 100%;
// text-align: ;
}
.circle {
width: 120px;
height: 120px;
position: relative;
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.act-img {
position: absolute;
width: 100%;
height: 100%;
animation: spin 2s linear infinite;
left: -0%;
top: 0%;
}
}
.online {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
}
}
.bottom {
background-image: url('/static/index/SYCPTJ.png');
}
}
.c {
width: 49vw;
height: 93vh;
.top {
margin-top: 1vh;
width: 49vw;
height: 61vh;
// background-color: RED;
background-image: url('/static/index/ZBK.png');
background-size: 100% 100%;
box-sizing: border-box;
padding: 2vh 2vw;
.c-top-tit {
display: flex;
color: white;
justify-content: space-between;
font-size: 12px;
line-height: 2vh;
.c-top-li {
padding: 2vh 3vw;
// background-color: #fff;
background-image: url('/static/index/DBTC.png');
background-size: 100% 100%;
}
}
.map {
width: 100%;
height: 50vh;
// background-color: #fff;
// border: 1px solid red;
}
}
.bottom {
width: 49vw;
height: 30vh;
margin-top: 1vh;
background-image: url('/static/index/ZNYJ.png');
background-size: 100% 100%;
box-sizing: border-box;
padding: 6vh 1vh 1vh 2vh;
position: relative;
}
}
.r {
width: 25vw;
height: 93vh;
.bottom {
width: 25vw;
box-sizing: border-box;
padding-top: 6vh;
padding: 6vh 1vh 0;
height: 61vh;
background-size: 100% 100%;
background-image: url('/static/index/MQ.png');
margin-top: 1vh;
.lands {
display: flex;
// justify-content: ;
flex-wrap: wrap;
height: 100%;
justify-content: space-between;
font-size: 14px;
.land {
width: 5vw;
height: 3vh;
// background-color: #fff;
background-image: url('/static/index/DK.png');
background-size: 100% 100%;
color: white;
text-align: center;
line-height: 3vh;
}
}
.video {
.video-tit {
color: white;
width: 110px;
text-align: center;
line-height: 30px;
height: 30px;
background-image: url('/static/index/JKBT.png');
background-size: cover;
font-size: 15px;
}
}
}
.top {
width: 25vw;
height: 30vh;
padding: 2vh;
box-sizing: border-box;
background-size: 100% 100%;
background-image: url('/static/index/YJCP.png');
margin-top: 1vh;
padding-top: 6vh;
.content {
width: 100%;
height: 100%;
transition: 1s;
// background-color: #fff;
overflow-y: auto;
font-size: 14px;
.eq {
width: 100%;
height: 10vh;
// background-color: #fff;
margin-bottom: 1vh;
background-color: #092049;
box-sizing: border-box;
padding: 1vh;
display: flex;
}
}
.content::-webkit-scrollbar {
width: 10px;
background-color: #153041;
}
.content::-webkit-scrollbar-track {
background-color: #153041;
}
::-webkit-scrollbar-thumb {
background-color: #1581DC;
border-radius: 5px;
}
}
}
}
</style>

562
src/view/option.js Normal file
View File

@ -0,0 +1,562 @@
import * as echarts from 'echarts';
let result = {
total: 500,
value: 218,
color: '#01EAFF'
}
result.rate = result.value / result.total.toFixed(4);
let echartData = [
{
name: '数量',
value: result.value,
itemStyle: {
normal: {
color: "#1598DC",
},
},
},
{
name: '剩下',
value: (result.total - result.value),
itemStyle: {
normal: {
color: 'rgba(31, 110, 255, 0)',
},
},
},
];
let echartData2 = [
{
name: '数量',
value: (result.total - result.value),
itemStyle: {
normal: {
color: '#1C3C65',
},
},
},
{
name: '剩下',
value: result.value,
itemStyle: {
normal: {
color: '#1598DC',
},
},
},
];
let result2 = {
total: 300,
value: 218,
color: '#01EAFF'
}
result2.rate = result2.value / result2.total.toFixed(4);
let echartData3 = [
{
name: '数量',
value: result2.value,
itemStyle: {
normal: {
color: "#35BFCA",
},
},
},
{
name: '剩下',
value: (result2.total - result2.value),
itemStyle: {
normal: {
color: '#1C3D69',
},
},
},
];
let echartData4 = [
{
name: '数量',
value: (result2.total - result2.value),
itemStyle: {
normal: {
color: '#1C3D69',
},
},
},
{
name: '剩下',
value: result2.value,
itemStyle: {
normal: {
color: '#35BFCA',
},
},
},
];
const options = {
// 在线设备数量
onLine: {
// backgroundColor: '#0F141B',
title: [
{
text: (result.value / result.total * 100) + '%',
x: 'center',
top: '42%',
textStyle: {
fontSize: 13,
color: '#00f0ff',
foontWeight: '500',
},
},
],
polar: {
radius: ['44%', '50%'],
center: ['50%', '50%'],
},
angleAxis: {
max: 100,
show: false,
},
radiusAxis: {
type: 'category',
show: true,
axisLabel: {
show: false,
},
axisLine: {
show: false,
},
axisTick: {
show: false,
},
},
series: [
{
type: 'pie',
startAngle: 90,
radius: ['60%', '80%'],
center: ['50%', '50%'],
data: echartData,
hoverAnimation: false,
label: {
show: false,
},
},
{
type: 'pie',
startAngle: (90 + (1 - result.rate) * 360),
radius: ['62%', '77%'],
center: ['50%', '50%'],
data: echartData2,
hoverAnimation: false,
label: {
show: false,
},
},
{
name: '',
type: 'pie',
startAngle: 90,
radius: '45%',
animation: false,
hoverAnimation: false,
center: ['50%', '50%'],
itemStyle: {
normal: {
labelLine: {
show: false,
},
color: new echarts.graphic.RadialGradient(0.5, 0.5, 1, [
{
offset: 1,
color: 'rgba(50,171,241, 1)',
},
{
offset: 0,
color: 'rgba(55,70,130, 0)',
},
]),
shadowBlur: 10,
},
},
data: [
{
value: 100,
},
],
},
],
},
// 设备离线
offLine: {
// backgroundColor: '#0F141B',
title: [
{
text: (result2.value / result2.total * 100).toFixed(2) + '%',
x: 'center',
top: '42%',
textStyle: {
fontSize: 13,
color: '#35BFCA',
foontWeight: '500',
},
},
],
polar: {
radius: ['44%', '50%'],
center: ['50%', '50%'],
},
angleAxis: {
max: 100,
show: false,
},
radiusAxis: {
type: 'category',
show: true,
axisLabel: {
show: false,
},
axisLine: {
show: false,
},
axisTick: {
show: false,
},
},
series: [
{
type: 'pie',
startAngle: 90,
radius: ['60%', '80%'],
center: ['50%', '50%'],
data: echartData3,
hoverAnimation: false,
label: {
show: false,
},
},
{
type: 'pie',
startAngle: (90 + (1 - result2.rate) * 360),
radius: ['62%', '77%'],
center: ['50%', '50%'],
data: echartData4,
hoverAnimation: false,
label: {
show: false,
},
},
{
name: '',
type: 'pie',
startAngle: 90,
radius: '45%',
animation: false,
hoverAnimation: false,
center: ['50%', '50%'],
itemStyle: {
normal: {
labelLine: {
show: false,
},
color: new echarts.graphic.RadialGradient(0.5, 0.5, 1, [
{
offset: 1,
color: 'rgba(50,171,241, 1)',
},
{
offset: 0,
color: 'rgba(55,70,130, 0)',
},
]),
shadowBlur: 10,
},
},
data: [
{
value: 100,
},
],
},
],
},
// 土壤温度
plant_temp: {
// backgroundColor: "#21263A",
color: ["#ffc20e", "#00ae9d"],
grid: {
top: "5%",
left: "2%",
right: "5%",
bottom: "5%",
containLabel: true
},
tooltip: {
trigger: "axis",
backgroundColor: "rgba(61, 85, 102, 0.2)",
borderWidth: 1,
borderColor: "#9DBAE1", // 边框颜色
// 选中线颜色
axisPointer: {
lineStyle: {
color: "#9DBAE1"
}
},
// 字体颜色
textStyle: {
color: "#fff",
fontSize: 10
}
},
legend: {
right: "3%",
icon: "circle",
itemWidth: 8,
itemGap: 20,
textStyle: {
padding: [0, 0, 0, 5]
}
},
xAxis: [
{
show: false,
type: "category",
boundaryGap: false,
axisLabel: {
color: "#33a3dc",
fontSize: 14
},
axisLine: {
lineStyle: {
color: "rgba(255,255,255,.1)"
}
},
data: ["4月", "5月", "6月", "7月", "8月", "9月", "10月"]
}
],
yAxis: [
{
show: false,
type: "value",
name: "",
axisLabel: {
color: "#33a3dc",
fontSize: 14
},
splitLine: {
lineStyle: {
type: "solid",
color: "rgba(255,255,255,.1)",
width: 1
}
}
}
],
series: [
{
name: "",
type: "line",
smooth: true, // 是否平滑曲线显示
// symbol:'circle', // 默认是空心圆(中间是白色的),改成实心圆
symbolSize: 0,
lineStyle: {
normal: {
color: "white" // 线条颜色
}
},
areaStyle: {
// 区域填充样式
normal: {
// 线性渐变前4个参数分别是x0,y0,x2,y2(范围0~1);相当于图形包围盒中的百分比。如果最后一个参数是true则该四个值是绝对像素位置。
color: new echarts.graphic.LinearGradient(0, 0, 0, 1,
[
{ offset: 0, color: "rgba(22,84,158, 0.8)" },
{ offset: 1, color: "rgba(22,84,158, 0.8)" }
],
false
)
// shadowColor: "rgba(53,142,215, 0.9)", // 阴影颜色
// shadowBlur: 20 // shadowBlur设图形阴影的模糊大小。配合shadowColor,shadowOffsetX/Y, 设置图形的阴影效果。
}
},
data: [20, 58, 19, 56, 86, 35, 25]
},
]
},
// 氮钾磷
CKP: {
// backgroundColor: "#21263A",
color: ["#ffc20e", "#00ae9d"],
grid: {
top: "5%",
left: "2%",
right: "5%",
bottom: "5%",
containLabel: true
},
tooltip: {
trigger: "axis",
backgroundColor: "rgba(61, 85, 102, 0.2)",
borderWidth: 1,
borderColor: "#9DBAE1", // 边框颜色
// 选中线颜色
axisPointer: {
lineStyle: {
color: "#9DBAE1"
}
},
// 字体颜色
textStyle: {
color: "#fff",
fontSize: 10
}
},
legend: {
right: "3%",
icon: "circle",
itemWidth: 8,
itemGap: 20,
textStyle: {
padding: [0, 0, 0, 5]
}
},
xAxis: [
{
show: false,
type: "category",
boundaryGap: false,
axisLabel: {
color: "#33a3dc",
fontSize: 14
},
axisLine: {
lineStyle: {
color: "rgba(255,255,255,.1)"
}
},
data: ["4月", "5月", "6月", "7月", "8月", "9月", "10月"]
}
],
yAxis: [
{
show: false,
type: "value",
name: "",
axisLabel: {
color: "#33a3dc",
fontSize: 14
},
splitLine: {
lineStyle: {
type: "solid",
color: "rgba(255,255,255,.1)",
width: 1
}
}
}
],
series: [
{
name: "",
type: "line",
smooth: true, // 是否平滑曲线显示
// symbol:'circle', // 默认是空心圆(中间是白色的),改成实心圆
symbolSize: 0,
lineStyle: {
normal: {
color: "white" // 线条颜色
}
},
areaStyle: {
// 区域填充样式
normal: {
// 线性渐变前4个参数分别是x0,y0,x2,y2(范围0~1);相当于图形包围盒中的百分比。如果最后一个参数是true则该四个值是绝对像素位置。
color: new echarts.graphic.LinearGradient(0, 0, 0, 1,
[
{ offset: 0, color: "rgba(22,84,156, 0.8)" },
{ offset: 1, color: "rgba(22,84,156, 0)" }
],
false
)
// shadowColor: "rgba(53,142,215, 0.9)", // 阴影颜色
// shadowBlur: 20 // shadowBlur设图形阴影的模糊大小。配合shadowColor,shadowOffsetX/Y, 设置图形的阴影效果。
}
},
data: [20, 58, 19, 56, 86, 35, 25]
},
{
name: "",
type: "line",
smooth: true, // 是否平滑曲线显示
// symbol:'circle', // 默认是空心圆(中间是白色的),改成实心圆
symbolSize: 0,
lineStyle: {
normal: {
color: "white" // 线条颜色
}
},
areaStyle: {
// 区域填充样式
normal: {
// 线性渐变前4个参数分别是x0,y0,x2,y2(范围0~1);相当于图形包围盒中的百分比。如果最后一个参数是true则该四个值是绝对像素位置。
color: new echarts.graphic.LinearGradient(0, 0, 0, 1,
[
{ offset: 0, color: "rgba(22,84,156, 0.8)" },
{ offset: 1, color: "rgba(22,84,156, 0)" }
],
false
)
// shadowColor: "rgba(53,142,215, 0.9)", // 阴影颜色
// shadowBlur: 20 // shadowBlur设图形阴影的模糊大小。配合shadowColor,shadowOffsetX/Y, 设置图形的阴影效果。
}
},
data: [40, 29, 38, 28, 43, 45, 62]
}, {
name: "",
type: "line",
smooth: true, // 是否平滑曲线显示
// symbol:'circle', // 默认是空心圆(中间是白色的),改成实心圆
symbolSize: 0,
lineStyle: {
normal: {
color: "white" // 线条颜色
}
},
areaStyle: {
// 区域填充样式
normal: {
// 线性渐变前4个参数分别是x0,y0,x2,y2(范围0~1);相当于图形包围盒中的百分比。如果最后一个参数是true则该四个值是绝对像素位置。
color: new echarts.graphic.LinearGradient(0, 0, 0, 1,
[
{ offset: 0, color: "rgba(22,84,156, 0.8)" },
{ offset: 1, color: "rgba(22,84,156, 0)" }
],
false
)
// shadowColor: "rgba(53,142,215, 0.9)", // 阴影颜色
// shadowBlur: 20 // shadowBlur设图形阴影的模糊大小。配合shadowColor,shadowOffsetX/Y, 设置图形的阴影效果。
}
},
data: [20, 39, 31, 15, 23, 40, 22]
}
]
}
}
export default options

16
src/view/utils.js/rem.js Normal file
View File

@ -0,0 +1,16 @@
// 基准大小
const baseSize = 37.5
// 设置 rem 函数
function setRem() {
// 当前页面宽度相对于 750 宽的缩放比例,可根据自己需要修改。
const scale = document.documentElement.clientWidth / 750
// 设置页面根节点字体大小
document.documentElement.style.fontSize = (baseSize * Math.min(scale, 2)) + 'px'
}
// 初始化
setRem()
// 改变窗口大小时重新设置 rem
window.onresize = function () {
setRem()
}

BIN
static/detail/MQJK.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

BIN
static/detail/QXHJJC.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

BIN
static/detail/SBGJ.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

BIN
static/detail/SQBG.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
static/detail/TRSQ.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

BIN
static/detail/YC.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
static/detail/ZC.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
static/detail/ZL.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
static/detail/bk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
static/detail/numbg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 611 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

6
static/font/font.css Normal file
View File

@ -0,0 +1,6 @@
@font-face {
font-family: 'FZCYJ';
src: url('ifonts.ttf');
font-weight: normal;
font-style: normal;
}

BIN
static/font/ifonts.ttf Normal file

Binary file not shown.

BIN
static/index/BG.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
static/index/BTBG.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
static/index/DBTC.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
static/index/DK.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
static/index/DW.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 B

BIN
static/index/GJ.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 B

BIN
static/index/JCSBSLTJ.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

BIN
static/index/JKBT.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
static/index/JTY.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
static/index/JYZ.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
static/index/MC.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
static/index/MQ.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

BIN
static/index/PM.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 B

BIN
static/index/Q.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 505 B

BIN
static/index/SBGJBG.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

BIN
static/index/SBGJTJ.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

BIN
static/index/SYCPTJ.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
static/index/YJCP.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
static/index/ZBK.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
static/index/ZNYJ.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

BIN
static/index/tableHead.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
static/index/tit.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

50
vite.config.js Normal file
View File

@ -0,0 +1,50 @@
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
import postCssPxToRem from 'postcss-pxtorem'
export default defineConfig({
plugins: [vue()],
server: { // ← ← ← ← ← ←
host: '0.0.0.0' // ← 新增内容 ←
},
resolve: {
//别名配置引用src路径下的东西可以通过@如import Layout from '@/layout/index.vue'
alias: {
'@': path.resolve(__dirname, 'src')
},
},
css: {
postcss: {
plugins: [
postCssPxToRem({
rootValue: 192,
propList: ['*'],
})
]
}
},
optimizeDeps: {
// 开发时 解决这些commonjs包转成esm包
include: [
"@jiaminghi/c-render",
"@jiaminghi/c-render/lib/plugin/util",
"@jiaminghi/charts/lib/util/index",
"@jiaminghi/charts/lib/util",
"@jiaminghi/charts/lib/extend/index",
"@jiaminghi/charts",
"@jiaminghi/color",
],
},
build: {
// 打包时需要另外处理的commonjs规范的包
commonjsOptions: {
include: [
/node_modules/, // 必须包含
],
},
}
})

731
yarn.lock Normal file
View File

@ -0,0 +1,731 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@babel/parser@^7.23.3":
version "7.23.5"
resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563"
integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==
"@babel/runtime@^7.5.5":
version "7.23.5"
resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.23.5.tgz#11edb98f8aeec529b82b211028177679144242db"
integrity sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==
dependencies:
regenerator-runtime "^0.14.0"
"@dataview/datav-vue3@^0.0.0-test.1672506674342":
version "0.0.0-test.1672506674342"
resolved "https://registry.npmmirror.com/@dataview/datav-vue3/-/datav-vue3-0.0.0-test.1672506674342.tgz#244105d18936a82ee139ab64a8b3bdd8b276f62d"
integrity sha512-d0oT/msAi592CTvWmQl0umkLpHgMwtTN2+peyo0L2GHNG7b4cKeO9meEF5o28DgFzRwOLeNQW73vKCF4JC+ihw==
dependencies:
"@jiaminghi/color" "^0.1.1"
classnames "^2.3.2"
lodash-es "^4.17.21"
"@esbuild/android-arm64@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.19.8.tgz#fb7130103835b6d43ea499c3f30cfb2b2ed58456"
integrity sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==
"@esbuild/android-arm@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.19.8.tgz#b46e4d9e984e6d6db6c4224d72c86b7757e35bcb"
integrity sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==
"@esbuild/android-x64@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.19.8.tgz#a13db9441b5a4f4e4fec4a6f8ffacfea07888db7"
integrity sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==
"@esbuild/darwin-arm64@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.8.tgz#49f5718d36541f40dd62bfdf84da9c65168a0fc2"
integrity sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==
"@esbuild/darwin-x64@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.19.8.tgz#75c5c88371eea4bfc1f9ecfd0e75104c74a481ac"
integrity sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==
"@esbuild/freebsd-arm64@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.8.tgz#9d7259fea4fd2b5f7437b52b542816e89d7c8575"
integrity sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==
"@esbuild/freebsd-x64@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.8.tgz#abac03e1c4c7c75ee8add6d76ec592f46dbb39e3"
integrity sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==
"@esbuild/linux-arm64@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.19.8.tgz#c577932cf4feeaa43cb9cec27b89cbe0df7d9098"
integrity sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==
"@esbuild/linux-arm@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.19.8.tgz#d6014d8b98b5cbc96b95dad3d14d75bb364fdc0f"
integrity sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==
"@esbuild/linux-ia32@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.19.8.tgz#2379a0554307d19ac4a6cdc15b08f0ea28e7a40d"
integrity sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==
"@esbuild/linux-loong64@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.19.8.tgz#e2a5bbffe15748b49356a6cd7b2d5bf60c5a7123"
integrity sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==
"@esbuild/linux-mips64el@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.8.tgz#1359331e6f6214f26f4b08db9b9df661c57cfa24"
integrity sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==
"@esbuild/linux-ppc64@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.8.tgz#9ba436addc1646dc89dae48c62d3e951ffe70951"
integrity sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==
"@esbuild/linux-riscv64@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.8.tgz#fbcf0c3a0b20f40b5fc31c3b7695f0769f9de66b"
integrity sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==
"@esbuild/linux-s390x@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.19.8.tgz#989e8a05f7792d139d5564ffa7ff898ac6f20a4a"
integrity sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==
"@esbuild/linux-x64@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.19.8.tgz#b187295393a59323397fe5ff51e769ec4e72212b"
integrity sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==
"@esbuild/netbsd-x64@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.8.tgz#c1ec0e24ea82313cb1c7bae176bd5acd5bde7137"
integrity sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==
"@esbuild/openbsd-x64@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.8.tgz#0c5b696ac66c6d70cf9ee17073a581a28af9e18d"
integrity sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==
"@esbuild/sunos-x64@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.19.8.tgz#2a697e1f77926ff09fcc457d8f29916d6cd48fb1"
integrity sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==
"@esbuild/win32-arm64@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.19.8.tgz#ec029e62a2fca8c071842ecb1bc5c2dd20b066f1"
integrity sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==
"@esbuild/win32-ia32@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.19.8.tgz#cbb9a3146bde64dc15543e48afe418c7a3214851"
integrity sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==
"@esbuild/win32-x64@0.19.8":
version "0.19.8"
resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.19.8.tgz#c8285183dbdb17008578dbacb6e22748709b4822"
integrity sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==
"@jiaminghi/bezier-curve@*":
version "0.0.9"
resolved "https://registry.npmmirror.com/@jiaminghi/bezier-curve/-/bezier-curve-0.0.9.tgz#5196aca93c8b061a612b4c3eabcedf9490cef6ee"
integrity sha512-u9xJPOEl6Dri2E9FfmJoGxYQY7vYJkURNX04Vj64tdi535tPrpkuf9Sm0lNr3QTKdHQh0DdNRsaa62FLQNQEEw==
dependencies:
"@babel/runtime" "^7.5.5"
"@jiaminghi/c-render@^0.4.3":
version "0.4.3"
resolved "https://registry.npmmirror.com/@jiaminghi/c-render/-/c-render-0.4.3.tgz#982ebd8f71b443bb9507834227834973ebd9b6d8"
integrity sha512-FJfzj5hGj7MLqqqI2D7vEzHKbQ1Ynnn7PJKgzsjXaZpJzTqs2Yw5OSeZnm6l7Qj7jyPAP53lFvEQNH4o4j6s+Q==
dependencies:
"@babel/runtime" "^7.5.5"
"@jiaminghi/bezier-curve" "*"
"@jiaminghi/color" "*"
"@jiaminghi/transition" "*"
"@jiaminghi/charts@*":
version "0.2.18"
resolved "https://registry.npmmirror.com/@jiaminghi/charts/-/charts-0.2.18.tgz#63ded95200789fc1a1fd04b7fd9e56f58d22d90f"
integrity sha512-K+HXaOOeWG9OOY1VG6M4mBreeeIAPhb9X+khG651AbnwEwL6G2UtcAQ8GWCq6GzhczcLwwhIhuaHqRygwHC0sA==
dependencies:
"@babel/runtime" "^7.5.5"
"@jiaminghi/c-render" "^0.4.3"
"@jiaminghi/color@*":
version "1.1.3"
resolved "https://registry.npmmirror.com/@jiaminghi/color/-/color-1.1.3.tgz#a2336750d1266155ffe80375c58c26fdec495611"
integrity sha512-ZY3hdorgODk4OSTbxyXBPxAxHPIVf9rPlKJyK1C1db46a50J0reFKpAvfZG8zMG3lvM60IR7Qawgcu4ZDO3+Hg==
"@jiaminghi/color@^0.1.1":
version "0.1.1"
resolved "https://registry.npmmirror.com/@jiaminghi/color/-/color-0.1.1.tgz#bddf9012dfce6982d3829a983ffeb91ee9dda7b6"
integrity sha512-M09+Sb5HGqVim0zo+nG5gU1v+6gXT8ptr0BZR6dMGt83XmCJgnZtO8s7llTW4hLFFFM5co6geZvTekqLpSPAAQ==
dependencies:
"@babel/runtime" "^7.5.5"
"@jiaminghi/data-view@^2.10.0":
version "2.10.0"
resolved "https://registry.npmmirror.com/@jiaminghi/data-view/-/data-view-2.10.0.tgz#2146d8fc71b9f24be808238ca050ddb7a4c8949f"
integrity sha512-Cud2MTiMcqc5k2KWabR/svuVQmXHANqURo+yj40370/LdI/gyUJ6LG203hWXEnT1nMCeiv/SLVmxv3PXLScCeA==
dependencies:
"@babel/runtime" "^7.5.5"
"@jiaminghi/charts" "*"
"@jiaminghi/transition@*":
version "1.1.11"
resolved "https://registry.npmmirror.com/@jiaminghi/transition/-/transition-1.1.11.tgz#576d8af092434b34201eba5eaecc79dd33c8ad8c"
integrity sha512-owBggipoHMikDHHDW5Gc7RZYlVuvxHADiU4bxfjBVkHDAmmck+fCkm46n2JzC3j33hWvP9nSCAeh37t6stgWeg==
dependencies:
"@babel/runtime" "^7.5.5"
"@jridgewell/sourcemap-codec@^1.4.15":
version "1.4.15"
resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
"@rollup/rollup-android-arm-eabi@4.6.1":
version "4.6.1"
resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.6.1.tgz#0ea289f68ff248b50fea5716ca9f65f7d4dba3ae"
integrity sha512-0WQ0ouLejaUCRsL93GD4uft3rOmB8qoQMU05Kb8CmMtMBe7XUDLAltxVZI1q6byNqEtU7N1ZX1Vw5lIpgulLQA==
"@rollup/rollup-android-arm64@4.6.1":
version "4.6.1"
resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.6.1.tgz#27c8c67fc5de574874085a1b480ac65b3e18378e"
integrity sha512-1TKm25Rn20vr5aTGGZqo6E4mzPicCUD79k17EgTLAsXc1zysyi4xXKACfUbwyANEPAEIxkzwue6JZ+stYzWUTA==
"@rollup/rollup-darwin-arm64@4.6.1":
version "4.6.1"
resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.6.1.tgz#c5735c042980c85495411af7183dd20294763bd8"
integrity sha512-cEXJQY/ZqMACb+nxzDeX9IPLAg7S94xouJJCNVE5BJM8JUEP4HeTF+ti3cmxWeSJo+5D+o8Tc0UAWUkfENdeyw==
"@rollup/rollup-darwin-x64@4.6.1":
version "4.6.1"
resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.6.1.tgz#af844bd54abb73ca3c9cf89a31eec17861d1375d"
integrity sha512-LoSU9Xu56isrkV2jLldcKspJ7sSXmZWkAxg7sW/RfF7GS4F5/v4EiqKSMCFbZtDu2Nc1gxxFdQdKwkKS4rwxNg==
"@rollup/rollup-linux-arm-gnueabihf@4.6.1":
version "4.6.1"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.6.1.tgz#5e972f63c441eaf859551039b3f18db9b035977d"
integrity sha512-EfI3hzYAy5vFNDqpXsNxXcgRDcFHUWSx5nnRSCKwXuQlI5J9dD84g2Usw81n3FLBNsGCegKGwwTVsSKK9cooSQ==
"@rollup/rollup-linux-arm64-gnu@4.6.1":
version "4.6.1"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.6.1.tgz#f4cfbc71e3b6fdb395b28b1472414e181515c72d"
integrity sha512-9lhc4UZstsegbNLhH0Zu6TqvDfmhGzuCWtcTFXY10VjLLUe4Mr0Ye2L3rrtHaDd/J5+tFMEuo5LTCSCMXWfUKw==
"@rollup/rollup-linux-arm64-musl@4.6.1":
version "4.6.1"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.6.1.tgz#6a94c691830dc29bf708de7c640f494996130893"
integrity sha512-FfoOK1yP5ksX3wwZ4Zk1NgyGHZyuRhf99j64I5oEmirV8EFT7+OhUZEnP+x17lcP/QHJNWGsoJwrz4PJ9fBEXw==
"@rollup/rollup-linux-x64-gnu@4.6.1":
version "4.6.1"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.6.1.tgz#f07bae3f7dc532d9ea5ab36c9071db329f9a1efb"
integrity sha512-DNGZvZDO5YF7jN5fX8ZqmGLjZEXIJRdJEdTFMhiyXqyXubBa0WVLDWSNlQ5JR2PNgDbEV1VQowhVRUh+74D+RA==
"@rollup/rollup-linux-x64-musl@4.6.1":
version "4.6.1"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.6.1.tgz#357a34fdbf410af88ce48bd802bea6462bb9a8bc"
integrity sha512-RkJVNVRM+piYy87HrKmhbexCHg3A6Z6MU0W9GHnJwBQNBeyhCJG9KDce4SAMdicQnpURggSvtbGo9xAWOfSvIQ==
"@rollup/rollup-win32-arm64-msvc@4.6.1":
version "4.6.1"
resolved "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.6.1.tgz#b6e97fd38281667e35297033393cd1101f4a31be"
integrity sha512-v2FVT6xfnnmTe3W9bJXl6r5KwJglMK/iRlkKiIFfO6ysKs0rDgz7Cwwf3tjldxQUrHL9INT/1r4VA0n9L/F1vQ==
"@rollup/rollup-win32-ia32-msvc@4.6.1":
version "4.6.1"
resolved "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.6.1.tgz#a95db026c640c8128bfd38546d85342f2329beaf"
integrity sha512-YEeOjxRyEjqcWphH9dyLbzgkF8wZSKAKUkldRY6dgNR5oKs2LZazqGB41cWJ4Iqqcy9/zqYgmzBkRoVz3Q9MLw==
"@rollup/rollup-win32-x64-msvc@4.6.1":
version "4.6.1"
resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.6.1.tgz#45785b5caf83200a34a9867ba50d69560880c120"
integrity sha512-0zfTlFAIhgz8V2G8STq8toAjsYYA6eci1hnXuyOTUFnymrtJwnS6uGKiv3v5UrPZkBlamLvrLV2iiaeqCKzb0A==
"@vitejs/plugin-vue@^4.5.0":
version "4.5.1"
resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.5.1.tgz#84815bfeb46928c03a9ed765e4a8425c22345e15"
integrity sha512-DaUzYFr+2UGDG7VSSdShKa9sIWYBa1LL8KC0MNOf2H5LjcTPjob0x8LbkqXWmAtbANJCkpiQTj66UVcQkN2s3g==
"@vue/compiler-core@3.3.9":
version "3.3.9"
resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.9.tgz#df1fc7947dcef5c2e12d257eae540057707f47d1"
integrity sha512-+/Lf68Vr/nFBA6ol4xOtJrW+BQWv3QWKfRwGSm70jtXwfhZNF4R/eRgyVJYoxFRhdCTk/F6g99BP0ffPgZihfQ==
dependencies:
"@babel/parser" "^7.23.3"
"@vue/shared" "3.3.9"
estree-walker "^2.0.2"
source-map-js "^1.0.2"
"@vue/compiler-dom@3.3.9":
version "3.3.9"
resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.9.tgz#67315ea4193d9d18c7a710889b8f90f7aa3914d2"
integrity sha512-nfWubTtLXuT4iBeDSZ5J3m218MjOy42Vp2pmKVuBKo2/BLcrFUX8nCSr/bKRFiJ32R8qbdnnnBgRn9AdU5v0Sg==
dependencies:
"@vue/compiler-core" "3.3.9"
"@vue/shared" "3.3.9"
"@vue/compiler-sfc@3.3.9":
version "3.3.9"
resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.9.tgz#5900906baba1a90389200d81753ad0f7ceb98a83"
integrity sha512-wy0CNc8z4ihoDzjASCOCsQuzW0A/HP27+0MDSSICMjVIFzk/rFViezkR3dzH+miS2NDEz8ywMdbjO5ylhOLI2A==
dependencies:
"@babel/parser" "^7.23.3"
"@vue/compiler-core" "3.3.9"
"@vue/compiler-dom" "3.3.9"
"@vue/compiler-ssr" "3.3.9"
"@vue/reactivity-transform" "3.3.9"
"@vue/shared" "3.3.9"
estree-walker "^2.0.2"
magic-string "^0.30.5"
postcss "^8.4.31"
source-map-js "^1.0.2"
"@vue/compiler-ssr@3.3.9":
version "3.3.9"
resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.9.tgz#3b3dbfa5368165fa4ff74c060503b4087ec1beed"
integrity sha512-NO5oobAw78R0G4SODY5A502MGnDNiDjf6qvhn7zD7TJGc8XDeIEw4fg6JU705jZ/YhuokBKz0A5a/FL/XZU73g==
dependencies:
"@vue/compiler-dom" "3.3.9"
"@vue/shared" "3.3.9"
"@vue/devtools-api@^6.5.0":
version "6.5.1"
resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz#7f71f31e40973eeee65b9a64382b13593fdbd697"
integrity sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==
"@vue/reactivity-transform@3.3.9":
version "3.3.9"
resolved "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.9.tgz#5d894dd9a42a422a2db309babb385f9a2529b52f"
integrity sha512-HnUFm7Ry6dFa4Lp63DAxTixUp8opMtQr6RxQCpDI1vlh12rkGIeYqMvJtK+IKyEfEOa2I9oCkD1mmsPdaGpdVg==
dependencies:
"@babel/parser" "^7.23.3"
"@vue/compiler-core" "3.3.9"
"@vue/shared" "3.3.9"
estree-walker "^2.0.2"
magic-string "^0.30.5"
"@vue/reactivity@3.3.9":
version "3.3.9"
resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.9.tgz#e28e8071bd74edcdd9c87b667ad00e8fbd8d6920"
integrity sha512-VmpIqlNp+aYDg2X0xQhJqHx9YguOmz2UxuUJDckBdQCNkipJvfk9yA75woLWElCa0Jtyec3lAAt49GO0izsphw==
dependencies:
"@vue/shared" "3.3.9"
"@vue/runtime-core@3.3.9":
version "3.3.9"
resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.9.tgz#c835b77f7dc7ae5f251e93f277b54963ea1b5c31"
integrity sha512-xxaG9KvPm3GTRuM4ZyU8Tc+pMVzcu6eeoSRQJ9IE7NmCcClW6z4B3Ij6L4EDl80sxe/arTtQ6YmgiO4UZqRc+w==
dependencies:
"@vue/reactivity" "3.3.9"
"@vue/shared" "3.3.9"
"@vue/runtime-dom@3.3.9":
version "3.3.9"
resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.9.tgz#68081d981695a229d72f431fed0b0cdd9161ce53"
integrity sha512-e7LIfcxYSWbV6BK1wQv9qJyxprC75EvSqF/kQKe6bdZEDNValzeRXEVgiX7AHI6hZ59HA4h7WT5CGvm69vzJTQ==
dependencies:
"@vue/runtime-core" "3.3.9"
"@vue/shared" "3.3.9"
csstype "^3.1.2"
"@vue/server-renderer@3.3.9":
version "3.3.9"
resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.9.tgz#ffb41bc9c7afafcc608d0c500e9d6b0af7d68fad"
integrity sha512-w0zT/s5l3Oa3ZjtLW88eO4uV6AQFqU8X5GOgzq7SkQQu6vVr+8tfm+OI2kDBplS/W/XgCBuFXiPw6T5EdwXP0A==
dependencies:
"@vue/compiler-ssr" "3.3.9"
"@vue/shared" "3.3.9"
"@vue/shared@3.3.9":
version "3.3.9"
resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.9.tgz#df740d26d338faf03e09ca662a8031acf66051db"
integrity sha512-ZE0VTIR0LmYgeyhurPTpy4KzKsuDyQbMSdM49eKkMnT5X4VfFBLysMzjIZhLEFQYjjOVVfbvUDHckwjDFiO2eA==
amfe-flexible@^2.2.1:
version "2.2.1"
resolved "https://registry.npmmirror.com/amfe-flexible/-/amfe-flexible-2.2.1.tgz#353f00289e4d38ca88a21eb3854420308af0b559"
integrity sha512-L2VfvDzoETBjhRptg5u/IUuzHSuxm22JpSRb404p/TBGeRfwWmmNEbB+TFPIP/sS/+pbM18bCFH9QnMojLuPNw==
anymatch@~3.1.2:
version "3.1.3"
resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
dependencies:
normalize-path "^3.0.0"
picomatch "^2.0.4"
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
axios@^1.6.2:
version "1.6.2"
resolved "https://registry.npmmirror.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2"
integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==
dependencies:
follow-redirects "^1.15.0"
form-data "^4.0.0"
proxy-from-env "^1.1.0"
binary-extensions@^2.0.0:
version "2.2.0"
resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
braces@~3.0.2:
version "3.0.2"
resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
dependencies:
fill-range "^7.0.1"
"chokidar@>=3.0.0 <4.0.0":
version "3.5.3"
resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
dependencies:
anymatch "~3.1.2"
braces "~3.0.2"
glob-parent "~5.1.2"
is-binary-path "~2.1.0"
is-glob "~4.0.1"
normalize-path "~3.0.0"
readdirp "~3.6.0"
optionalDependencies:
fsevents "~2.3.2"
classnames@^2.3.2:
version "2.3.2"
resolved "https://registry.npmmirror.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924"
integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==
claygl@^1.2.1:
version "1.3.0"
resolved "https://registry.npmmirror.com/claygl/-/claygl-1.3.0.tgz#7a6e2903210519ac358848f5d78070ed211685f3"
integrity sha512-+gGtJjT6SSHD2l2yC3MCubW/sCV40tZuSs5opdtn79vFSGUgp/lH139RNEQ6Jy078/L0aV8odCw8RSrUcMfLaQ==
combined-stream@^1.0.8:
version "1.0.8"
resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
dependencies:
delayed-stream "~1.0.0"
csstype@^3.1.2:
version "3.1.2"
resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
echarts-gl@^2.0.9:
version "2.0.9"
resolved "https://registry.npmmirror.com/echarts-gl/-/echarts-gl-2.0.9.tgz#ee228a6c7520a6fb7bbb71ea94394f3637ade033"
integrity sha512-oKeMdkkkpJGWOzjgZUsF41DOh6cMsyrGGXimbjK2l6Xeq/dBQu4ShG2w2Dzrs/1bD27b2pLTGSaUzouY191gzA==
dependencies:
claygl "^1.2.1"
zrender "^5.1.1"
echarts@^5.4.3:
version "5.4.3"
resolved "https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz#f5522ef24419164903eedcfd2b506c6fc91fb20c"
integrity sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==
dependencies:
tslib "2.3.0"
zrender "5.4.4"
esbuild@^0.19.3:
version "0.19.8"
resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.19.8.tgz#ad05b72281d84483fa6b5345bd246c27a207b8f1"
integrity sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==
optionalDependencies:
"@esbuild/android-arm" "0.19.8"
"@esbuild/android-arm64" "0.19.8"
"@esbuild/android-x64" "0.19.8"
"@esbuild/darwin-arm64" "0.19.8"
"@esbuild/darwin-x64" "0.19.8"
"@esbuild/freebsd-arm64" "0.19.8"
"@esbuild/freebsd-x64" "0.19.8"
"@esbuild/linux-arm" "0.19.8"
"@esbuild/linux-arm64" "0.19.8"
"@esbuild/linux-ia32" "0.19.8"
"@esbuild/linux-loong64" "0.19.8"
"@esbuild/linux-mips64el" "0.19.8"
"@esbuild/linux-ppc64" "0.19.8"
"@esbuild/linux-riscv64" "0.19.8"
"@esbuild/linux-s390x" "0.19.8"
"@esbuild/linux-x64" "0.19.8"
"@esbuild/netbsd-x64" "0.19.8"
"@esbuild/openbsd-x64" "0.19.8"
"@esbuild/sunos-x64" "0.19.8"
"@esbuild/win32-arm64" "0.19.8"
"@esbuild/win32-ia32" "0.19.8"
"@esbuild/win32-x64" "0.19.8"
estree-walker@^2.0.2:
version "2.0.2"
resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
fill-range@^7.0.1:
version "7.0.1"
resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
dependencies:
to-regex-range "^5.0.1"
follow-redirects@^1.15.0:
version "1.15.3"
resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a"
integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==
form-data@^4.0.0:
version "4.0.0"
resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.8"
mime-types "^2.1.12"
fsevents@~2.3.2, fsevents@~2.3.3:
version "2.3.3"
resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
dependencies:
is-glob "^4.0.1"
immutable@^4.0.0:
version "4.3.4"
resolved "https://registry.npmmirror.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f"
integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==
is-binary-path@~2.1.0:
version "2.1.0"
resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
dependencies:
binary-extensions "^2.0.0"
is-extglob@^2.1.1:
version "2.1.1"
resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
is-glob@^4.0.1, is-glob@~4.0.1:
version "4.0.3"
resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
dependencies:
is-extglob "^2.1.1"
is-number@^7.0.0:
version "7.0.0"
resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
lodash-es@^4.17.21:
version "4.17.21"
resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
magic-string@^0.30.5:
version "0.30.5"
resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9"
integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==
dependencies:
"@jridgewell/sourcemap-codec" "^1.4.15"
mime-db@1.52.0:
version "1.52.0"
resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
mime-types@^2.1.12:
version "2.1.35"
resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
dependencies:
mime-db "1.52.0"
nanoid@^3.3.6:
version "3.3.7"
resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
neo-async@^2.6.2:
version "2.6.2"
resolved "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
picocolors@^0.2.1:
version "0.2.1"
resolved "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f"
integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==
picocolors@^1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
picomatch@^2.0.4, picomatch@^2.2.1:
version "2.3.1"
resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
postcss-pxtorem@^5.1.1:
version "5.1.1"
resolved "https://registry.npmmirror.com/postcss-pxtorem/-/postcss-pxtorem-5.1.1.tgz#198a68c10f9ad2d42370ef66299d7b3168f8cffa"
integrity sha512-uvgIujL/pn0GbZ+rczESD2orHsbXrrCqi+q9wJO8PCk3ZGCoVVtu5hZTbtk+tbZHZP5UkTfCvqOrTZs9Ncqfsg==
dependencies:
postcss "^7.0.27"
postcss@^7.0.27:
version "7.0.39"
resolved "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309"
integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==
dependencies:
picocolors "^0.2.1"
source-map "^0.6.1"
postcss@^8.4.31:
version "8.4.31"
resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d"
integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==
dependencies:
nanoid "^3.3.6"
picocolors "^1.0.0"
source-map-js "^1.0.2"
proxy-from-env@^1.1.0:
version "1.1.0"
resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
readdirp@~3.6.0:
version "3.6.0"
resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
dependencies:
picomatch "^2.2.1"
regenerator-runtime@^0.14.0:
version "0.14.0"
resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45"
integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==
rollup@^4.2.0:
version "4.6.1"
resolved "https://registry.npmmirror.com/rollup/-/rollup-4.6.1.tgz#351501c86b5b4f976dde8c5837516452b59921f8"
integrity sha512-jZHaZotEHQaHLgKr8JnQiDT1rmatjgKlMekyksz+yk9jt/8z9quNjnKNRoaM0wd9DC2QKXjmWWuDYtM3jfF8pQ==
optionalDependencies:
"@rollup/rollup-android-arm-eabi" "4.6.1"
"@rollup/rollup-android-arm64" "4.6.1"
"@rollup/rollup-darwin-arm64" "4.6.1"
"@rollup/rollup-darwin-x64" "4.6.1"
"@rollup/rollup-linux-arm-gnueabihf" "4.6.1"
"@rollup/rollup-linux-arm64-gnu" "4.6.1"
"@rollup/rollup-linux-arm64-musl" "4.6.1"
"@rollup/rollup-linux-x64-gnu" "4.6.1"
"@rollup/rollup-linux-x64-musl" "4.6.1"
"@rollup/rollup-win32-arm64-msvc" "4.6.1"
"@rollup/rollup-win32-ia32-msvc" "4.6.1"
"@rollup/rollup-win32-x64-msvc" "4.6.1"
fsevents "~2.3.2"
sass-loader@^13.3.2:
version "13.3.2"
resolved "https://registry.npmmirror.com/sass-loader/-/sass-loader-13.3.2.tgz#460022de27aec772480f03de17f5ba88fa7e18c6"
integrity sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==
dependencies:
neo-async "^2.6.2"
sass@^1.69.5:
version "1.69.5"
resolved "https://registry.npmmirror.com/sass/-/sass-1.69.5.tgz#23e18d1c757a35f2e52cc81871060b9ad653dfde"
integrity sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==
dependencies:
chokidar ">=3.0.0 <4.0.0"
immutable "^4.0.0"
source-map-js ">=0.6.2 <2.0.0"
"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2:
version "1.0.2"
resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
source-map@^0.6.1:
version "0.6.1"
resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
to-regex-range@^5.0.1:
version "5.0.1"
resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
dependencies:
is-number "^7.0.0"
tslib@2.3.0:
version "2.3.0"
resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e"
integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
vite@^5.0.0:
version "5.0.4"
resolved "https://registry.npmmirror.com/vite/-/vite-5.0.4.tgz#d984d2aaa8bac30f1ca9b9eea9b97e052f88c307"
integrity sha512-RzAr8LSvM8lmhB4tQ5OPcBhpjOZRZjuxv9zO5UcxeoY2bd3kP3Ticd40Qma9/BqZ8JS96Ll/jeBX9u+LJZrhVg==
dependencies:
esbuild "^0.19.3"
postcss "^8.4.31"
rollup "^4.2.0"
optionalDependencies:
fsevents "~2.3.3"
vue-router@^4.2.5:
version "4.2.5"
resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.2.5.tgz#b9e3e08f1bd9ea363fdd173032620bc50cf0e98a"
integrity sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==
dependencies:
"@vue/devtools-api" "^6.5.0"
vue@^3.3.8:
version "3.3.9"
resolved "https://registry.npmmirror.com/vue/-/vue-3.3.9.tgz#219a2ec68e8d4d0b0180460af0f5b9299b3f3f1f"
integrity sha512-sy5sLCTR8m6tvUk1/ijri3Yqzgpdsmxgj6n6yl7GXXCXqVbmW2RCXe9atE4cEI6Iv7L89v5f35fZRRr5dChP9w==
dependencies:
"@vue/compiler-dom" "3.3.9"
"@vue/compiler-sfc" "3.3.9"
"@vue/runtime-dom" "3.3.9"
"@vue/server-renderer" "3.3.9"
"@vue/shared" "3.3.9"
zrender@5.4.4, zrender@^5.1.1:
version "5.4.4"
resolved "https://registry.npmmirror.com/zrender/-/zrender-5.4.4.tgz#8854f1d95ecc82cf8912f5a11f86657cb8c9e261"
integrity sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==
dependencies:
tslib "2.3.0"