feat:增加eslint+prettier 代码校验格式化
This commit is contained in:
15
.eslintignore
Normal file
15
.eslintignore
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
*.sh
|
||||||
|
node_modules
|
||||||
|
*.md
|
||||||
|
*.woff
|
||||||
|
*.ttf
|
||||||
|
.vscode
|
||||||
|
.idea
|
||||||
|
dist
|
||||||
|
/public
|
||||||
|
/docs
|
||||||
|
.husky
|
||||||
|
.local
|
||||||
|
/bin
|
||||||
|
Dockerfile
|
||||||
25
.eslintrc.cjs
Normal file
25
.eslintrc.cjs
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
module.exports = {
|
||||||
|
"env": {
|
||||||
|
"browser": true,
|
||||||
|
"es2021": true,
|
||||||
|
"node":true
|
||||||
|
},
|
||||||
|
"extends": [
|
||||||
|
"eslint:recommended",
|
||||||
|
"plugin:vue/vue3-essential",
|
||||||
|
"plugin:@typescript-eslint/recommended",
|
||||||
|
'plugin:prettier/recommended'
|
||||||
|
],
|
||||||
|
"parser": "vue-eslint-parser",
|
||||||
|
"parserOptions": {
|
||||||
|
"ecmaVersion": "latest",
|
||||||
|
"parser": "@typescript-eslint/parser",
|
||||||
|
"sourceType": "module"
|
||||||
|
},
|
||||||
|
"plugins": [
|
||||||
|
"vue",
|
||||||
|
"@typescript-eslint"
|
||||||
|
],
|
||||||
|
"rules": {
|
||||||
|
}
|
||||||
|
}
|
||||||
9
.prettierignore
Normal file
9
.prettierignore
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
/dist/*
|
||||||
|
.local
|
||||||
|
.output.js
|
||||||
|
/node_modules/**
|
||||||
|
|
||||||
|
**/*.svg
|
||||||
|
**/*.sh
|
||||||
|
|
||||||
|
/public/*
|
||||||
@@ -7,7 +7,8 @@
|
|||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
"preview": "vite preview",
|
"preview": "vite preview",
|
||||||
"lint": "eslint . --ext .vue,.js,.ts,.jsx,.tsx --fix"
|
"lint": "eslint . --ext .vue,.js,.ts,.jsx,.tsx --fix",
|
||||||
|
"lint:prettier": "prettier --write \"src/**/*.{js,json,tsx,css,less,scss,vue,html,md}\""
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@better-scroll/core": "^2.4.2",
|
"@better-scroll/core": "^2.4.2",
|
||||||
@@ -47,14 +48,19 @@
|
|||||||
"@vitejs/plugin-vue": "^3.0.0",
|
"@vitejs/plugin-vue": "^3.0.0",
|
||||||
"dart-sass": "^1.25.0",
|
"dart-sass": "^1.25.0",
|
||||||
"eslint": "^8.21.0",
|
"eslint": "^8.21.0",
|
||||||
|
"eslint-config-prettier": "^8.5.0",
|
||||||
|
"eslint-plugin-prettier": "^4.2.1",
|
||||||
"eslint-plugin-vue": "^9.3.0",
|
"eslint-plugin-vue": "^9.3.0",
|
||||||
"fast-glob": "^3.2.11",
|
"fast-glob": "^3.2.11",
|
||||||
|
"prettier": "^2.7.1",
|
||||||
"typescript": "^4.6.4",
|
"typescript": "^4.6.4",
|
||||||
"unplugin-auto-import": "^0.10.3",
|
"unplugin-auto-import": "^0.10.3",
|
||||||
"unplugin-vue-components": "^0.21.2",
|
"unplugin-vue-components": "^0.21.2",
|
||||||
|
"unplugin-vue-define-options": "^0.7.3",
|
||||||
"vite": "^3.0.0",
|
"vite": "^3.0.0",
|
||||||
"vite-plugin-compression": "^0.5.1",
|
"vite-plugin-compression": "^0.5.1",
|
||||||
"vite-plugin-svg-icons": "^2.0.1",
|
"vite-plugin-svg-icons": "^2.0.1",
|
||||||
|
"vite-plugin-vue-setup-extend": "^0.4.0",
|
||||||
"vue-tsc": "^0.38.4"
|
"vue-tsc": "^0.38.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
14
prettier.config.cjs
Normal file
14
prettier.config.cjs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
module.exports = {
|
||||||
|
// 一行的字符数,如果超过会进行换行,默认为80
|
||||||
|
printWidth: 100,
|
||||||
|
// 行位是否使用分号,默认为true
|
||||||
|
semi: false,
|
||||||
|
vueIndentScriptAndStyle: true,
|
||||||
|
// 字符串是否使用单引号,默认为false,使用双引号
|
||||||
|
singleQuote: true,
|
||||||
|
// 是否使用尾逗号,有三个可选值"<none|es5|all>"
|
||||||
|
trailingComma: 'all',
|
||||||
|
proseWrap: 'never',
|
||||||
|
htmlWhitespaceSensitivity: 'strict',
|
||||||
|
endOfLine: 'auto',
|
||||||
|
};
|
||||||
@@ -14,10 +14,10 @@
|
|||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
color: #2c3e50;
|
color: #2c3e50;
|
||||||
}
|
}
|
||||||
html,body{
|
html,
|
||||||
|
body {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background: #f6f8f9;
|
background: #f6f8f9;
|
||||||
|
|
||||||
}
|
}
|
||||||
.el-pager li:focus {
|
.el-pager li:focus {
|
||||||
border: none;
|
border: none;
|
||||||
|
|||||||
@@ -11,24 +11,24 @@ export default {
|
|||||||
props: {
|
props: {
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
chart: null
|
chart: null,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@@ -57,44 +57,48 @@ export default {
|
|||||||
backgroundColor: '#08263a',
|
backgroundColor: '#08263a',
|
||||||
grid: {
|
grid: {
|
||||||
left: '5%',
|
left: '5%',
|
||||||
right: '5%'
|
right: '5%',
|
||||||
},
|
},
|
||||||
xAxis: [{
|
xAxis: [
|
||||||
|
{
|
||||||
show: false,
|
show: false,
|
||||||
data: xAxisData
|
data: xAxisData,
|
||||||
}, {
|
},
|
||||||
|
{
|
||||||
show: false,
|
show: false,
|
||||||
data: xAxisData
|
data: xAxisData,
|
||||||
}],
|
},
|
||||||
|
],
|
||||||
visualMap: {
|
visualMap: {
|
||||||
show: false,
|
show: false,
|
||||||
min: 0,
|
min: 0,
|
||||||
max: 50,
|
max: 50,
|
||||||
dimension: 0,
|
dimension: 0,
|
||||||
inRange: {
|
inRange: {
|
||||||
color: ['#4a657a', '#308e92', '#b1cfa5', '#f5d69f', '#f5898b', '#ef5055']
|
color: ['#4a657a', '#308e92', '#b1cfa5', '#f5d69f', '#f5898b', '#ef5055'],
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
yAxis: {
|
yAxis: {
|
||||||
axisLine: {
|
axisLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
axisLabel: {
|
axisLabel: {
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#4a657a'
|
color: '#4a657a',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
splitLine: {
|
splitLine: {
|
||||||
show: true,
|
show: true,
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#08263f'
|
color: '#08263f',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false
|
show: false,
|
||||||
}
|
|
||||||
},
|
},
|
||||||
series: [{
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
name: 'back',
|
name: 'back',
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
data: data2,
|
data: data2,
|
||||||
@@ -104,10 +108,11 @@ export default {
|
|||||||
opacity: 0.4,
|
opacity: 0.4,
|
||||||
barBorderRadius: 5,
|
barBorderRadius: 5,
|
||||||
shadowBlur: 3,
|
shadowBlur: 3,
|
||||||
shadowColor: '#111'
|
shadowColor: '#111',
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}, {
|
},
|
||||||
|
{
|
||||||
name: 'Simulate Shadow',
|
name: 'Simulate Shadow',
|
||||||
type: 'line',
|
type: 'line',
|
||||||
data,
|
data,
|
||||||
@@ -118,17 +123,18 @@ export default {
|
|||||||
animationDuration: 1200,
|
animationDuration: 1200,
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: 'transparent'
|
color: 'transparent',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
areaStyle: {
|
areaStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: '#08263a',
|
color: '#08263a',
|
||||||
shadowBlur: 50,
|
shadowBlur: 50,
|
||||||
shadowColor: '#000'
|
shadowColor: '#000',
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}, {
|
},
|
||||||
|
{
|
||||||
name: 'front',
|
name: 'front',
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
data,
|
data,
|
||||||
@@ -136,10 +142,11 @@ export default {
|
|||||||
z: 3,
|
z: 3,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
barBorderRadius: 5
|
barBorderRadius: 5,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}],
|
},
|
||||||
|
],
|
||||||
animationEasing: 'elasticOut',
|
animationEasing: 'elasticOut',
|
||||||
animationEasingUpdate: 'elasticOut',
|
animationEasingUpdate: 'elasticOut',
|
||||||
animationDelay(idx) {
|
animationDelay(idx) {
|
||||||
@@ -147,9 +154,9 @@ export default {
|
|||||||
},
|
},
|
||||||
animationDelayUpdate(idx) {
|
animationDelayUpdate(idx) {
|
||||||
return idx * 20
|
return idx * 20
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -3,34 +3,34 @@
|
|||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from 'echarts'
|
import * as echarts from 'echarts'
|
||||||
import {computed, nextTick, onMounted, ref, watch} from "vue";
|
import { computed, nextTick, onMounted, ref, watch } from 'vue'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {useStore} from "vuex";
|
import { useStore } from 'vuex'
|
||||||
// 在setup中获取store
|
// 在setup中获取store
|
||||||
const store = useStore()
|
const store = useStore()
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const isCollapse = computed(() => {
|
const isCollapse = computed(() => {
|
||||||
return store.state.app.isCollapse
|
return store.state.app.isCollapse
|
||||||
})
|
})
|
||||||
|
|
||||||
let chart:EChartsType;
|
let chart: EChartsType
|
||||||
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
@@ -42,17 +42,17 @@ const initChart =()=> {
|
|||||||
textStyle: {
|
textStyle: {
|
||||||
fontWeight: 'normal',
|
fontWeight: 'normal',
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
color: '#F1F1F3'
|
color: '#F1F1F3',
|
||||||
},
|
},
|
||||||
left: '1%'
|
left: '1%',
|
||||||
},
|
},
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
axisPointer: {
|
axisPointer: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#57617B'
|
color: '#57617B',
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
legend: {
|
legend: {
|
||||||
top: 20,
|
top: 20,
|
||||||
@@ -64,50 +64,68 @@ const initChart =()=> {
|
|||||||
right: '4%',
|
right: '4%',
|
||||||
textStyle: {
|
textStyle: {
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
color: '#F1F1F3'
|
color: '#F1F1F3',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
grid: {
|
grid: {
|
||||||
top: 100,
|
top: 100,
|
||||||
left: '2%',
|
left: '2%',
|
||||||
right: '2%',
|
right: '2%',
|
||||||
bottom: '2%',
|
bottom: '2%',
|
||||||
containLabel: true
|
containLabel: true,
|
||||||
},
|
},
|
||||||
xAxis: [{
|
xAxis: [
|
||||||
|
{
|
||||||
type: 'category',
|
type: 'category',
|
||||||
boundaryGap: false,
|
boundaryGap: false,
|
||||||
axisLine: {
|
axisLine: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#57617B'
|
color: '#57617B',
|
||||||
}
|
|
||||||
},
|
},
|
||||||
data: ['13:00', '13:05', '13:10', '13:15', '13:20', '13:25', '13:30', '13:35', '13:40', '13:45', '13:50', '13:55']
|
},
|
||||||
}],
|
data: [
|
||||||
yAxis: [{
|
'13:00',
|
||||||
|
'13:05',
|
||||||
|
'13:10',
|
||||||
|
'13:15',
|
||||||
|
'13:20',
|
||||||
|
'13:25',
|
||||||
|
'13:30',
|
||||||
|
'13:35',
|
||||||
|
'13:40',
|
||||||
|
'13:45',
|
||||||
|
'13:50',
|
||||||
|
'13:55',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
yAxis: [
|
||||||
|
{
|
||||||
type: 'value',
|
type: 'value',
|
||||||
name: '(%)',
|
name: '(%)',
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
axisLine: {
|
axisLine: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#57617B'
|
color: '#57617B',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
axisLabel: {
|
axisLabel: {
|
||||||
margin: 10,
|
margin: 10,
|
||||||
textStyle: {
|
textStyle: {
|
||||||
fontSize: 14
|
fontSize: 14,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
splitLine: {
|
splitLine: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#57617B'
|
color: '#57617B',
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}],
|
},
|
||||||
series: [{
|
],
|
||||||
|
series: [
|
||||||
|
{
|
||||||
name: 'CMCC',
|
name: 'CMCC',
|
||||||
type: 'line',
|
type: 'line',
|
||||||
smooth: true,
|
smooth: true,
|
||||||
@@ -116,32 +134,42 @@ const initChart =()=> {
|
|||||||
showSymbol: false,
|
showSymbol: false,
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
width: 1
|
width: 1,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
areaStyle: {
|
areaStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
|
color: new echarts.graphic.LinearGradient(
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
[
|
||||||
|
{
|
||||||
offset: 0,
|
offset: 0,
|
||||||
color: 'rgba(137, 189, 27, 0.3)'
|
color: 'rgba(137, 189, 27, 0.3)',
|
||||||
}, {
|
},
|
||||||
|
{
|
||||||
offset: 0.8,
|
offset: 0.8,
|
||||||
color: 'rgba(137, 189, 27, 0)'
|
color: 'rgba(137, 189, 27, 0)',
|
||||||
}], false),
|
},
|
||||||
|
],
|
||||||
|
false,
|
||||||
|
),
|
||||||
shadowColor: 'rgba(0, 0, 0, 0.1)',
|
shadowColor: 'rgba(0, 0, 0, 0.1)',
|
||||||
shadowBlur: 10
|
shadowBlur: 10,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: 'rgb(137,189,27)',
|
color: 'rgb(137,189,27)',
|
||||||
borderColor: 'rgba(137,189,2,0.27)',
|
borderColor: 'rgba(137,189,2,0.27)',
|
||||||
borderWidth: 12
|
borderWidth: 12,
|
||||||
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
data: [220, 182, 191, 134, 150, 120, 110, 125, 145, 122, 165, 122]
|
},
|
||||||
}, {
|
data: [220, 182, 191, 134, 150, 120, 110, 125, 145, 122, 165, 122],
|
||||||
|
},
|
||||||
|
{
|
||||||
name: 'CTCC',
|
name: 'CTCC',
|
||||||
type: 'line',
|
type: 'line',
|
||||||
smooth: true,
|
smooth: true,
|
||||||
@@ -150,32 +178,42 @@ const initChart =()=> {
|
|||||||
showSymbol: false,
|
showSymbol: false,
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
width: 1
|
width: 1,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
areaStyle: {
|
areaStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
|
color: new echarts.graphic.LinearGradient(
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
[
|
||||||
|
{
|
||||||
offset: 0,
|
offset: 0,
|
||||||
color: 'rgba(0, 136, 212, 0.3)'
|
color: 'rgba(0, 136, 212, 0.3)',
|
||||||
}, {
|
},
|
||||||
|
{
|
||||||
offset: 0.8,
|
offset: 0.8,
|
||||||
color: 'rgba(0, 136, 212, 0)'
|
color: 'rgba(0, 136, 212, 0)',
|
||||||
}], false),
|
},
|
||||||
|
],
|
||||||
|
false,
|
||||||
|
),
|
||||||
shadowColor: 'rgba(0, 0, 0, 0.1)',
|
shadowColor: 'rgba(0, 0, 0, 0.1)',
|
||||||
shadowBlur: 10
|
shadowBlur: 10,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: 'rgb(0,136,212)',
|
color: 'rgb(0,136,212)',
|
||||||
borderColor: 'rgba(0,136,212,0.2)',
|
borderColor: 'rgba(0,136,212,0.2)',
|
||||||
borderWidth: 12
|
borderWidth: 12,
|
||||||
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
data: [120, 110, 125, 145, 122, 165, 122, 220, 182, 191, 134, 150]
|
},
|
||||||
}, {
|
data: [120, 110, 125, 145, 122, 165, 122, 220, 182, 191, 134, 150],
|
||||||
|
},
|
||||||
|
{
|
||||||
name: 'CUCC',
|
name: 'CUCC',
|
||||||
type: 'line',
|
type: 'line',
|
||||||
smooth: true,
|
smooth: true,
|
||||||
@@ -184,31 +222,42 @@ const initChart =()=> {
|
|||||||
showSymbol: false,
|
showSymbol: false,
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
width: 1
|
width: 1,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
areaStyle: {
|
areaStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
|
color: new echarts.graphic.LinearGradient(
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
[
|
||||||
|
{
|
||||||
offset: 0,
|
offset: 0,
|
||||||
color: 'rgba(219, 50, 51, 0.3)'
|
color: 'rgba(219, 50, 51, 0.3)',
|
||||||
}, {
|
},
|
||||||
|
{
|
||||||
offset: 0.8,
|
offset: 0.8,
|
||||||
color: 'rgba(219, 50, 51, 0)'
|
color: 'rgba(219, 50, 51, 0)',
|
||||||
}], false),
|
},
|
||||||
|
],
|
||||||
|
false,
|
||||||
|
),
|
||||||
shadowColor: 'rgba(0, 0, 0, 0.1)',
|
shadowColor: 'rgba(0, 0, 0, 0.1)',
|
||||||
shadowBlur: 10
|
shadowBlur: 10,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: 'rgb(219,50,51)',
|
color: 'rgb(219,50,51)',
|
||||||
borderColor: 'rgba(219,50,51,0.2)',
|
borderColor: 'rgba(219,50,51,0.2)',
|
||||||
borderWidth: 12
|
borderWidth: 12,
|
||||||
}
|
|
||||||
},
|
},
|
||||||
data: [220, 182, 125, 145, 122, 191, 134, 150, 120, 110, 165, 122]
|
},
|
||||||
}]
|
data: [220, 182, 125, 145, 122, 191, 134, 150, 120, 110, 165, 122],
|
||||||
|
},
|
||||||
|
],
|
||||||
})
|
})
|
||||||
return chart
|
return chart
|
||||||
}
|
}
|
||||||
@@ -219,12 +268,10 @@ watch(isCollapse,()=>{
|
|||||||
}, 300)
|
}, 300)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
chart = initChart()
|
chart = initChart()
|
||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -11,24 +11,24 @@ export default {
|
|||||||
props: {
|
props: {
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
chart: null
|
chart: null,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@@ -50,7 +50,7 @@ export default {
|
|||||||
data.push(i + 'month')
|
data.push(i + 'month')
|
||||||
}
|
}
|
||||||
return data
|
return data
|
||||||
}())
|
})()
|
||||||
this.chart.setOption({
|
this.chart.setOption({
|
||||||
backgroundColor: '#344b58',
|
backgroundColor: '#344b58',
|
||||||
title: {
|
title: {
|
||||||
@@ -59,20 +59,20 @@ export default {
|
|||||||
top: '20',
|
top: '20',
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#fff',
|
color: '#fff',
|
||||||
fontSize: '22'
|
fontSize: '22',
|
||||||
},
|
},
|
||||||
subtextStyle: {
|
subtextStyle: {
|
||||||
color: '#90979c',
|
color: '#90979c',
|
||||||
fontSize: '16'
|
fontSize: '16',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
axisPointer: {
|
axisPointer: {
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#fff'
|
color: '#fff',
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
grid: {
|
grid: {
|
||||||
left: '5%',
|
left: '5%',
|
||||||
@@ -81,87 +81,92 @@ export default {
|
|||||||
top: 150,
|
top: 150,
|
||||||
bottom: 95,
|
bottom: 95,
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#fff'
|
color: '#fff',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
legend: {
|
legend: {
|
||||||
x: '5%',
|
x: '5%',
|
||||||
top: '10%',
|
top: '10%',
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#90979c'
|
color: '#90979c',
|
||||||
},
|
},
|
||||||
data: ['female', 'male', 'average']
|
data: ['female', 'male', 'average'],
|
||||||
},
|
},
|
||||||
calculable: true,
|
calculable: true,
|
||||||
xAxis: [{
|
xAxis: [
|
||||||
|
{
|
||||||
type: 'category',
|
type: 'category',
|
||||||
axisLine: {
|
axisLine: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#90979c'
|
color: '#90979c',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
splitLine: {
|
splitLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
splitArea: {
|
splitArea: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
axisLabel: {
|
axisLabel: {
|
||||||
interval: 0
|
interval: 0,
|
||||||
|
|
||||||
},
|
},
|
||||||
data: xData
|
data: xData,
|
||||||
}],
|
},
|
||||||
yAxis: [{
|
],
|
||||||
|
yAxis: [
|
||||||
|
{
|
||||||
type: 'value',
|
type: 'value',
|
||||||
splitLine: {
|
splitLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
axisLine: {
|
axisLine: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#90979c'
|
color: '#90979c',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
axisLabel: {
|
axisLabel: {
|
||||||
interval: 0
|
interval: 0,
|
||||||
},
|
},
|
||||||
splitArea: {
|
splitArea: {
|
||||||
show: false
|
show: false,
|
||||||
}
|
},
|
||||||
}],
|
},
|
||||||
dataZoom: [{
|
],
|
||||||
|
dataZoom: [
|
||||||
|
{
|
||||||
show: true,
|
show: true,
|
||||||
height: 30,
|
height: 30,
|
||||||
xAxisIndex: [
|
xAxisIndex: [0],
|
||||||
0
|
|
||||||
],
|
|
||||||
bottom: 30,
|
bottom: 30,
|
||||||
start: 10,
|
start: 10,
|
||||||
end: 80,
|
end: 80,
|
||||||
handleIcon: 'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z',
|
handleIcon:
|
||||||
|
'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z',
|
||||||
handleSize: '110%',
|
handleSize: '110%',
|
||||||
handleStyle: {
|
handleStyle: {
|
||||||
color: '#d3dee5'
|
color: '#d3dee5',
|
||||||
|
|
||||||
},
|
},
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#fff' },
|
color: '#fff',
|
||||||
borderColor: '#90979c'
|
},
|
||||||
|
borderColor: '#90979c',
|
||||||
}, {
|
},
|
||||||
|
{
|
||||||
type: 'inside',
|
type: 'inside',
|
||||||
show: true,
|
show: true,
|
||||||
height: 15,
|
height: 15,
|
||||||
start: 1,
|
start: 1,
|
||||||
end: 35
|
end: 35,
|
||||||
}],
|
},
|
||||||
series: [{
|
],
|
||||||
|
series: [
|
||||||
|
{
|
||||||
name: 'female',
|
name: 'female',
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
stack: 'total',
|
stack: 'total',
|
||||||
@@ -173,29 +178,16 @@ export default {
|
|||||||
label: {
|
label: {
|
||||||
show: true,
|
show: true,
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#fff'
|
color: '#fff',
|
||||||
},
|
},
|
||||||
position: 'insideTop',
|
position: 'insideTop',
|
||||||
formatter(p) {
|
formatter(p) {
|
||||||
return p.value > 0 ? p.value : ''
|
return p.value > 0 ? p.value : ''
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
data: [
|
},
|
||||||
709,
|
},
|
||||||
1917,
|
},
|
||||||
2455,
|
data: [709, 1917, 2455, 2610, 1719, 1433, 1544, 3285, 5208, 3372, 2484, 4078],
|
||||||
2610,
|
|
||||||
1719,
|
|
||||||
1433,
|
|
||||||
1544,
|
|
||||||
3285,
|
|
||||||
5208,
|
|
||||||
3372,
|
|
||||||
2484,
|
|
||||||
4078
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -211,25 +203,13 @@ export default {
|
|||||||
position: 'top',
|
position: 'top',
|
||||||
formatter(p) {
|
formatter(p) {
|
||||||
return p.value > 0 ? p.value : ''
|
return p.value > 0 ? p.value : ''
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
data: [
|
},
|
||||||
327,
|
},
|
||||||
1776,
|
},
|
||||||
507,
|
data: [327, 1776, 507, 1200, 800, 482, 204, 1390, 1001, 951, 381, 220],
|
||||||
1200,
|
},
|
||||||
800,
|
{
|
||||||
482,
|
|
||||||
204,
|
|
||||||
1390,
|
|
||||||
1001,
|
|
||||||
951,
|
|
||||||
381,
|
|
||||||
220
|
|
||||||
]
|
|
||||||
}, {
|
|
||||||
name: 'average',
|
name: 'average',
|
||||||
type: 'line',
|
type: 'line',
|
||||||
stack: 'total',
|
stack: 'total',
|
||||||
@@ -244,28 +224,15 @@ export default {
|
|||||||
position: 'top',
|
position: 'top',
|
||||||
formatter(p) {
|
formatter(p) {
|
||||||
return p.value > 0 ? p.value : ''
|
return p.value > 0 ? p.value : ''
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
data: [
|
},
|
||||||
1036,
|
},
|
||||||
3693,
|
},
|
||||||
2962,
|
data: [1036, 3693, 2962, 3810, 2519, 1915, 1748, 4675, 6209, 4323, 2865, 4298],
|
||||||
3810,
|
},
|
||||||
2519,
|
],
|
||||||
1915,
|
|
||||||
1748,
|
|
||||||
4675,
|
|
||||||
6209,
|
|
||||||
4323,
|
|
||||||
2865,
|
|
||||||
4298
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
})
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
$_sidebarElm: null,
|
$_sidebarElm: null,
|
||||||
$_resizeHandler: null
|
$_resizeHandler: null,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@@ -40,17 +40,19 @@ export default {
|
|||||||
window.addEventListener('resize', this.$_resizeHandler)
|
window.addEventListener('resize', this.$_resizeHandler)
|
||||||
|
|
||||||
this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
|
this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
|
||||||
this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
|
this.$_sidebarElm &&
|
||||||
|
this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
|
||||||
},
|
},
|
||||||
destroyListener() {
|
destroyListener() {
|
||||||
window.removeEventListener('resize', this.$_resizeHandler)
|
window.removeEventListener('resize', this.$_resizeHandler)
|
||||||
this.$_resizeHandler = null
|
this.$_resizeHandler = null
|
||||||
|
|
||||||
this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
|
this.$_sidebarElm &&
|
||||||
|
this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
|
||||||
},
|
},
|
||||||
resize() {
|
resize() {
|
||||||
const { chart } = this
|
const { chart } = this
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,9 +19,8 @@ const count = ref(0)
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
Check out
|
Check out
|
||||||
<a href="https://vuejs.org/guide/quick-start.html#local" target="_blank"
|
<a href="https://vuejs.org/guide/quick-start.html#local" target="_blank">create-vue</a>, the
|
||||||
>create-vue</a
|
official Vue + Vite starter
|
||||||
>, the official Vue + Vite starter
|
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Install
|
Install
|
||||||
|
|||||||
@@ -5,9 +5,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { computed } from "@vue/reactivity";
|
import { computed } from 'vue'
|
||||||
export default {
|
export default {
|
||||||
name: "baseSvgIcon",
|
name: 'baseSvgIcon',
|
||||||
props: {
|
props: {
|
||||||
iconClass: { type: String },
|
iconClass: { type: String },
|
||||||
className: { type: String },
|
className: { type: String },
|
||||||
@@ -15,14 +15,14 @@ export default {
|
|||||||
setup(props) {
|
setup(props) {
|
||||||
console.log(11111111)
|
console.log(11111111)
|
||||||
const iconName = computed(() => {
|
const iconName = computed(() => {
|
||||||
return props.iconClass ? `#icon-${props.iconClass}` : "#icon";
|
return props.iconClass ? `#icon-${props.iconClass}` : '#icon'
|
||||||
});
|
})
|
||||||
const svgClass = computed(() => {
|
const svgClass = computed(() => {
|
||||||
return props.className ? "svg-icon " + props.className : "svg-icon";
|
return props.className ? 'svg-icon ' + props.className : 'svg-icon'
|
||||||
});
|
})
|
||||||
return { iconName, svgClass };
|
return { iconName, svgClass }
|
||||||
},
|
},
|
||||||
};
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
@@ -34,4 +34,3 @@ export default {
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="zb-pipeline-start-wrapper">
|
<div class="zb-pipeline-start-wrapper">
|
||||||
<div class="zb-pipeline-start" v-bind:class="control === value ? 'active' : ''" v-on:click="handleClick">
|
<div
|
||||||
|
class="zb-pipeline-start"
|
||||||
|
v-bind:class="control === value ? 'active' : ''"
|
||||||
|
v-on:click="handleClick"
|
||||||
|
>
|
||||||
<div class="zb-pipeline-start-header">
|
<div class="zb-pipeline-start-header">
|
||||||
<zb-icon type="play-filled" />
|
<zb-icon type="play-filled" />
|
||||||
</div>
|
</div>
|
||||||
@@ -23,41 +27,128 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import {
|
import { Help } from '@element-plus/icons-vue'
|
||||||
Help
|
|
||||||
} from '@element-plus/icons-vue'
|
|
||||||
</script>
|
</script>
|
||||||
<style>
|
<style>
|
||||||
/* zb-pipeline-start-wrapper */
|
/* zb-pipeline-start-wrapper */
|
||||||
.zb-pipeline-start-wrapper { position:relative; padding:0 40px; }
|
.zb-pipeline-start-wrapper {
|
||||||
|
position: relative;
|
||||||
|
padding: 0 40px;
|
||||||
|
}
|
||||||
|
|
||||||
/* zb-pipeline-start */
|
/* zb-pipeline-start */
|
||||||
.zb-pipeline-start { cursor:pointer; user-select:none; position:relative; display:flex; justify-content:flex-start; align-items:stretch; width:200px; height:40px; border-radius:2px; background-color:#fff; }
|
.zb-pipeline-start {
|
||||||
.zb-pipeline-start:after { content:""; position:absolute; top:20px; right:-40px; display:block; width:40px; height:1px; background-color:#2d8cf0; }
|
cursor: pointer;
|
||||||
.zb-pipeline-start .zb-pipeline-start-header { display:flex; justify-content:center; align-items:center; width:40px; border-width:1px 0 1px 1px; border-style:solid; border-color:#2d8cf0; border-radius:2px 0 0 2px; background-color:#2d8cf0; color:#fff; font-size:14px; font-weight:600; transition:all 0.2s cubic-bezier(0.23,1,0.32,1); }
|
user-select: none;
|
||||||
.zb-pipeline-start .zb-pipeline-start-body { flex:1; display:flex; border-width:1px 1px 1px 0; border-style:solid; border-color:#e3e8f0; border-radius:0 2px 2px 0; padding:0 8px; overflow:hidden; transition:all 0.2s cubic-bezier(0.23,1,0.32,1); }
|
position: relative;
|
||||||
.zb-pipeline-start .zb-pipeline-start-title { flex:1; display:block; overflow:hidden; color:#262626; font-size:14px; font-weight:600; line-height:38px; white-space:nowrap; text-overflow:ellipsis; }
|
display: flex;
|
||||||
.zb-pipeline-start .zb-pipeline-start-tooltip { cursor:pointer; display:flex; justify-content:center; align-items:center; margin-left:8px; }
|
justify-content: flex-start;
|
||||||
.zb-pipeline-start .zb-pipeline-start-tooltip .zb-tooltip { display:block; }
|
align-items: stretch;
|
||||||
.zb-pipeline-start .zb-pipeline-start-tooltip .zb-icon { display:block; color:#595959; font-size:14px; }
|
width: 200px;
|
||||||
|
height: 40px;
|
||||||
|
border-radius: 2px;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
.zb-pipeline-start:after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 20px;
|
||||||
|
right: -40px;
|
||||||
|
display: block;
|
||||||
|
width: 40px;
|
||||||
|
height: 1px;
|
||||||
|
background-color: #2d8cf0;
|
||||||
|
}
|
||||||
|
.zb-pipeline-start .zb-pipeline-start-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 40px;
|
||||||
|
border-width: 1px 0 1px 1px;
|
||||||
|
border-style: solid;
|
||||||
|
border-color: #2d8cf0;
|
||||||
|
border-radius: 2px 0 0 2px;
|
||||||
|
background-color: #2d8cf0;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
transition: all 0.2s cubic-bezier(0.23, 1, 0.32, 1);
|
||||||
|
}
|
||||||
|
.zb-pipeline-start .zb-pipeline-start-body {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
border-width: 1px 1px 1px 0;
|
||||||
|
border-style: solid;
|
||||||
|
border-color: #e3e8f0;
|
||||||
|
border-radius: 0 2px 2px 0;
|
||||||
|
padding: 0 8px;
|
||||||
|
overflow: hidden;
|
||||||
|
transition: all 0.2s cubic-bezier(0.23, 1, 0.32, 1);
|
||||||
|
}
|
||||||
|
.zb-pipeline-start .zb-pipeline-start-title {
|
||||||
|
flex: 1;
|
||||||
|
display: block;
|
||||||
|
overflow: hidden;
|
||||||
|
color: #262626;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 38px;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
.zb-pipeline-start .zb-pipeline-start-tooltip {
|
||||||
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
.zb-pipeline-start .zb-pipeline-start-tooltip .zb-tooltip {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.zb-pipeline-start .zb-pipeline-start-tooltip .zb-icon {
|
||||||
|
display: block;
|
||||||
|
color: #595959;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
/* zb-pipeline-start hover */
|
/* zb-pipeline-start hover */
|
||||||
.zb-pipeline-start:hover { }
|
.zb-pipeline-start:hover {
|
||||||
.zb-pipeline-start:hover:after { }
|
}
|
||||||
.zb-pipeline-start:hover .zb-pipeline-start-header { border-color:#2d8cf0; }
|
.zb-pipeline-start:hover:after {
|
||||||
.zb-pipeline-start:hover .zb-pipeline-start-body { border-color:#2d8cf0; }
|
}
|
||||||
.zb-pipeline-start:hover .zb-pipeline-start-title { }
|
.zb-pipeline-start:hover .zb-pipeline-start-header {
|
||||||
.zb-pipeline-start:hover .zb-pipeline-start-tooltip { }
|
border-color: #2d8cf0;
|
||||||
.zb-pipeline-start:hover .zb-pipeline-start-tooltip .zb-tooltip { }
|
}
|
||||||
.zb-pipeline-start:hover .zb-pipeline-start-tooltip .zb-icon { }
|
.zb-pipeline-start:hover .zb-pipeline-start-body {
|
||||||
|
border-color: #2d8cf0;
|
||||||
|
}
|
||||||
|
.zb-pipeline-start:hover .zb-pipeline-start-title {
|
||||||
|
}
|
||||||
|
.zb-pipeline-start:hover .zb-pipeline-start-tooltip {
|
||||||
|
}
|
||||||
|
.zb-pipeline-start:hover .zb-pipeline-start-tooltip .zb-tooltip {
|
||||||
|
}
|
||||||
|
.zb-pipeline-start:hover .zb-pipeline-start-tooltip .zb-icon {
|
||||||
|
}
|
||||||
|
|
||||||
/* zb-pipeline-start active */
|
/* zb-pipeline-start active */
|
||||||
.zb-pipeline-start.active { }
|
.zb-pipeline-start.active {
|
||||||
.zb-pipeline-start.active:after { }
|
}
|
||||||
.zb-pipeline-start.active .zb-pipeline-start-header { border-color:#2d8cf0; }
|
.zb-pipeline-start.active:after {
|
||||||
.zb-pipeline-start.active .zb-pipeline-start-body { border-color:#2d8cf0; }
|
}
|
||||||
.zb-pipeline-start.active .zb-pipeline-start-title { }
|
.zb-pipeline-start.active .zb-pipeline-start-header {
|
||||||
.zb-pipeline-start.active .zb-pipeline-start-tooltip { }
|
border-color: #2d8cf0;
|
||||||
.zb-pipeline-start.active .zb-pipeline-start-tooltip .zb-tooltip { }
|
}
|
||||||
.zb-pipeline-start.active .zb-pipeline-start-tooltip .zb-icon { }
|
.zb-pipeline-start.active .zb-pipeline-start-body {
|
||||||
|
border-color: #2d8cf0;
|
||||||
|
}
|
||||||
|
.zb-pipeline-start.active .zb-pipeline-start-title {
|
||||||
|
}
|
||||||
|
.zb-pipeline-start.active .zb-pipeline-start-tooltip {
|
||||||
|
}
|
||||||
|
.zb-pipeline-start.active .zb-pipeline-start-tooltip .zb-tooltip {
|
||||||
|
}
|
||||||
|
.zb-pipeline-start.active .zb-pipeline-start-tooltip .zb-icon {
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -2,7 +2,11 @@
|
|||||||
<el-breadcrumb class="app-breadcrumb" separator="/">
|
<el-breadcrumb class="app-breadcrumb" separator="/">
|
||||||
<transition-group name="breadcrumb">
|
<transition-group name="breadcrumb">
|
||||||
<el-breadcrumb-item v-for="(item, index) in obj.levelList" :key="item.path">
|
<el-breadcrumb-item v-for="(item, index) in obj.levelList" :key="item.path">
|
||||||
<span v-if="item.redirect==='noRedirect'||index==obj.levelList.length-1" class="no-redirect">{{ item.meta.title }}</span>
|
<span
|
||||||
|
v-if="item.redirect === 'noRedirect' || index == obj.levelList.length - 1"
|
||||||
|
class="no-redirect"
|
||||||
|
>{{ item.meta.title }}</span
|
||||||
|
>
|
||||||
<a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
|
<a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
|
||||||
</el-breadcrumb-item>
|
</el-breadcrumb-item>
|
||||||
</transition-group>
|
</transition-group>
|
||||||
@@ -11,7 +15,7 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import pathToRegexp from 'path-to-regexp'
|
import pathToRegexp from 'path-to-regexp'
|
||||||
import {onMounted, reactive, watch} from "vue";
|
import { onMounted, reactive, watch } from 'vue'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
|
|
||||||
const obj = reactive({ levelList: {} })
|
const obj = reactive({ levelList: {} })
|
||||||
@@ -19,9 +23,11 @@
|
|||||||
|
|
||||||
// 获取面包屑
|
// 获取面包屑
|
||||||
const getBreadcrumb = () => {
|
const getBreadcrumb = () => {
|
||||||
let matched = route.matched.filter(item => item.meta && item.meta.title)
|
let matched = route.matched.filter((item) => item.meta && item.meta.title)
|
||||||
const first = matched[0]
|
const first = matched[0]
|
||||||
obj.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
|
obj.levelList = matched.filter(
|
||||||
|
(item) => item.meta && item.meta.title && item.meta.breadcrumb !== false,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getBreadcrumb()
|
getBreadcrumb()
|
||||||
|
|||||||
@@ -6,9 +6,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup></script>
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.m-container-layout {
|
.m-container-layout {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import CountTo from './vue-countTo.vue';
|
import CountTo from './vue-countTo.vue'
|
||||||
export default CountTo;
|
export default CountTo
|
||||||
if (typeof window !== 'undefined' && window.Vue) {
|
if (typeof window !== 'undefined' && window.Vue) {
|
||||||
window.Vue.component('count-to', CountTo);
|
window.Vue.component('count-to', CountTo)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,10 +18,15 @@ if (isServer) {
|
|||||||
let prefix
|
let prefix
|
||||||
// 通过遍历各浏览器前缀,来得到requestAnimationFrame和cancelAnimationFrame在当前浏览器的实现形式
|
// 通过遍历各浏览器前缀,来得到requestAnimationFrame和cancelAnimationFrame在当前浏览器的实现形式
|
||||||
for (let i = 0; i < prefixes.length; i++) {
|
for (let i = 0; i < prefixes.length; i++) {
|
||||||
if (requestAnimationFrame && cancelAnimationFrame) { break }
|
if (requestAnimationFrame && cancelAnimationFrame) {
|
||||||
|
break
|
||||||
|
}
|
||||||
prefix = prefixes[i]
|
prefix = prefixes[i]
|
||||||
requestAnimationFrame = requestAnimationFrame || window[prefix + 'RequestAnimationFrame']
|
requestAnimationFrame = requestAnimationFrame || window[prefix + 'RequestAnimationFrame']
|
||||||
cancelAnimationFrame = cancelAnimationFrame || window[prefix + 'CancelAnimationFrame'] || window[prefix + 'CancelRequestAnimationFrame']
|
cancelAnimationFrame =
|
||||||
|
cancelAnimationFrame ||
|
||||||
|
window[prefix + 'CancelAnimationFrame'] ||
|
||||||
|
window[prefix + 'CancelRequestAnimationFrame']
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果当前浏览器不支持requestAnimationFrame和cancelAnimationFrame,则会退到setTimeout
|
// 如果当前浏览器不支持requestAnimationFrame和cancelAnimationFrame,则会退到setTimeout
|
||||||
|
|||||||
@@ -10,22 +10,22 @@ export default {
|
|||||||
startVal: {
|
startVal: {
|
||||||
type: Number,
|
type: Number,
|
||||||
required: false,
|
required: false,
|
||||||
default: 0
|
default: 0,
|
||||||
},
|
},
|
||||||
endVal: {
|
endVal: {
|
||||||
type: Number,
|
type: Number,
|
||||||
required: false,
|
required: false,
|
||||||
default: 2017
|
default: 2017,
|
||||||
},
|
},
|
||||||
duration: {
|
duration: {
|
||||||
type: Number,
|
type: Number,
|
||||||
required: false,
|
required: false,
|
||||||
default: 3000
|
default: 3000,
|
||||||
},
|
},
|
||||||
autoplay: {
|
autoplay: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
required: false,
|
required: false,
|
||||||
default: true
|
default: true,
|
||||||
},
|
},
|
||||||
decimals: {
|
decimals: {
|
||||||
type: Number,
|
type: Number,
|
||||||
@@ -33,39 +33,39 @@ export default {
|
|||||||
default: 0,
|
default: 0,
|
||||||
validator(value) {
|
validator(value) {
|
||||||
return value >= 0
|
return value >= 0
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
decimal: {
|
decimal: {
|
||||||
type: String,
|
type: String,
|
||||||
required: false,
|
required: false,
|
||||||
default: '.'
|
default: '.',
|
||||||
},
|
},
|
||||||
separator: {
|
separator: {
|
||||||
type: String,
|
type: String,
|
||||||
required: false,
|
required: false,
|
||||||
default: ','
|
default: ',',
|
||||||
},
|
},
|
||||||
prefix: {
|
prefix: {
|
||||||
type: String,
|
type: String,
|
||||||
required: false,
|
required: false,
|
||||||
default: ''
|
default: '',
|
||||||
},
|
},
|
||||||
suffix: {
|
suffix: {
|
||||||
type: String,
|
type: String,
|
||||||
required: false,
|
required: false,
|
||||||
default: ''
|
default: '',
|
||||||
},
|
},
|
||||||
useEasing: {
|
useEasing: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
required: false,
|
required: false,
|
||||||
default: true
|
default: true,
|
||||||
},
|
},
|
||||||
easingFn: {
|
easingFn: {
|
||||||
type: Function,
|
type: Function,
|
||||||
default(t, b, c, d) {
|
default(t, b, c, d) {
|
||||||
return c * (-Math.pow(2, -10 * t / d) + 1) * 1024 / 1023 + b;
|
return (c * (-Math.pow(2, (-10 * t) / d) + 1) * 1024) / 1023 + b
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@@ -77,115 +77,126 @@ export default {
|
|||||||
startTime: null,
|
startTime: null,
|
||||||
timestamp: null,
|
timestamp: null,
|
||||||
remaining: null,
|
remaining: null,
|
||||||
rAF: null
|
rAF: null,
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
countDown() {
|
countDown() {
|
||||||
return this.startVal > this.endVal
|
return this.startVal > this.endVal
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
startVal() {
|
startVal() {
|
||||||
if (this.autoplay) {
|
if (this.autoplay) {
|
||||||
this.start();
|
this.start()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
endVal() {
|
endVal() {
|
||||||
if (this.autoplay) {
|
if (this.autoplay) {
|
||||||
this.start();
|
this.start()
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
if (this.autoplay) {
|
if (this.autoplay) {
|
||||||
this.start();
|
this.start()
|
||||||
}
|
}
|
||||||
this.$emit('mountedCallback')
|
this.$emit('mountedCallback')
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
start() {
|
start() {
|
||||||
this.localStartVal = this.startVal;
|
this.localStartVal = this.startVal
|
||||||
this.startTime = null;
|
this.startTime = null
|
||||||
this.localDuration = this.duration;
|
this.localDuration = this.duration
|
||||||
this.paused = false;
|
this.paused = false
|
||||||
this.rAF = requestAnimationFrame(this.count);
|
this.rAF = requestAnimationFrame(this.count)
|
||||||
},
|
},
|
||||||
pauseResume() {
|
pauseResume() {
|
||||||
if (this.paused) {
|
if (this.paused) {
|
||||||
this.resume();
|
this.resume()
|
||||||
this.paused = false;
|
this.paused = false
|
||||||
} else {
|
} else {
|
||||||
this.pause();
|
this.pause()
|
||||||
this.paused = true;
|
this.paused = true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
pause() {
|
pause() {
|
||||||
cancelAnimationFrame(this.rAF);
|
cancelAnimationFrame(this.rAF)
|
||||||
},
|
},
|
||||||
resume() {
|
resume() {
|
||||||
this.startTime = null;
|
this.startTime = null
|
||||||
this.localDuration = +this.remaining;
|
this.localDuration = +this.remaining
|
||||||
this.localStartVal = +this.printVal;
|
this.localStartVal = +this.printVal
|
||||||
requestAnimationFrame(this.count);
|
requestAnimationFrame(this.count)
|
||||||
},
|
},
|
||||||
reset() {
|
reset() {
|
||||||
this.startTime = null;
|
this.startTime = null
|
||||||
cancelAnimationFrame(this.rAF);
|
cancelAnimationFrame(this.rAF)
|
||||||
this.displayValue = this.formatNumber(this.startVal);
|
this.displayValue = this.formatNumber(this.startVal)
|
||||||
},
|
},
|
||||||
count(timestamp) {
|
count(timestamp) {
|
||||||
if (!this.startTime) this.startTime = timestamp;
|
if (!this.startTime) this.startTime = timestamp
|
||||||
this.timestamp = timestamp;
|
this.timestamp = timestamp
|
||||||
const progress = timestamp - this.startTime;
|
const progress = timestamp - this.startTime
|
||||||
this.remaining = this.localDuration - progress;
|
this.remaining = this.localDuration - progress
|
||||||
|
|
||||||
if (this.useEasing) {
|
if (this.useEasing) {
|
||||||
if (this.countDown) {
|
if (this.countDown) {
|
||||||
this.printVal = this.localStartVal - this.easingFn(progress, 0, this.localStartVal - this.endVal, this.localDuration)
|
this.printVal =
|
||||||
|
this.localStartVal -
|
||||||
|
this.easingFn(progress, 0, this.localStartVal - this.endVal, this.localDuration)
|
||||||
} else {
|
} else {
|
||||||
this.printVal = this.easingFn(progress, this.localStartVal, this.endVal - this.localStartVal, this.localDuration);
|
this.printVal = this.easingFn(
|
||||||
|
progress,
|
||||||
|
this.localStartVal,
|
||||||
|
this.endVal - this.localStartVal,
|
||||||
|
this.localDuration,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (this.countDown) {
|
if (this.countDown) {
|
||||||
this.printVal = this.localStartVal - ((this.localStartVal - this.endVal) * (progress / this.localDuration));
|
this.printVal =
|
||||||
|
this.localStartVal -
|
||||||
|
(this.localStartVal - this.endVal) * (progress / this.localDuration)
|
||||||
} else {
|
} else {
|
||||||
this.printVal = this.localStartVal + (this.endVal - this.localStartVal) * (progress / this.localDuration);
|
this.printVal =
|
||||||
|
this.localStartVal +
|
||||||
|
(this.endVal - this.localStartVal) * (progress / this.localDuration)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.countDown) {
|
if (this.countDown) {
|
||||||
this.printVal = this.printVal < this.endVal ? this.endVal : this.printVal;
|
this.printVal = this.printVal < this.endVal ? this.endVal : this.printVal
|
||||||
} else {
|
} else {
|
||||||
this.printVal = this.printVal > this.endVal ? this.endVal : this.printVal;
|
this.printVal = this.printVal > this.endVal ? this.endVal : this.printVal
|
||||||
}
|
}
|
||||||
|
|
||||||
this.displayValue = this.formatNumber(this.printVal)
|
this.displayValue = this.formatNumber(this.printVal)
|
||||||
if (progress < this.localDuration) {
|
if (progress < this.localDuration) {
|
||||||
this.rAF = requestAnimationFrame(this.count);
|
this.rAF = requestAnimationFrame(this.count)
|
||||||
} else {
|
} else {
|
||||||
this.$emit('callback');
|
this.$emit('callback')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
isNumber(val) {
|
isNumber(val) {
|
||||||
return !isNaN(parseFloat(val))
|
return !isNaN(parseFloat(val))
|
||||||
},
|
},
|
||||||
formatNumber(num) {
|
formatNumber(num) {
|
||||||
num = num.toFixed(this.decimals);
|
num = num.toFixed(this.decimals)
|
||||||
num += '';
|
num += ''
|
||||||
const x = num.split('.');
|
const x = num.split('.')
|
||||||
let x1 = x[0];
|
let x1 = x[0]
|
||||||
const x2 = x.length > 1 ? this.decimal + x[1] : '';
|
const x2 = x.length > 1 ? this.decimal + x[1] : ''
|
||||||
const rgx = /(\d+)(\d{3})/;
|
const rgx = /(\d+)(\d{3})/
|
||||||
if (this.separator && !this.isNumber(this.separator)) {
|
if (this.separator && !this.isNumber(this.separator)) {
|
||||||
while (rgx.test(x1)) {
|
while (rgx.test(x1)) {
|
||||||
x1 = x1.replace(rgx, '$1' + this.separator + '$2');
|
x1 = x1.replace(rgx, '$1' + this.separator + '$2')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this.prefix + x1 + x2 + this.suffix;
|
return this.prefix + x1 + x2 + this.suffix
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
destroyed() {
|
destroyed() {
|
||||||
cancelAnimationFrame(this.rAF)
|
cancelAnimationFrame(this.rAF)
|
||||||
|
},
|
||||||
}
|
}
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="m-info">
|
<div class="m-info">
|
||||||
<el-popover
|
<el-popover width="200px" placement="bottom">
|
||||||
width="200px"
|
|
||||||
placement="bottom"
|
|
||||||
>
|
|
||||||
<template #reference>
|
<template #reference>
|
||||||
<el-badge :value="3" class="item-info-pop">
|
<el-badge :value="3" class="item-info-pop">
|
||||||
<el-icon class="bell"><Bell /></el-icon>
|
<el-icon class="bell"><Bell /></el-icon>
|
||||||
@@ -12,16 +9,20 @@
|
|||||||
<div>
|
<div>
|
||||||
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
|
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
|
||||||
<el-tab-pane label="通知" name="first">
|
<el-tab-pane label="通知" name="first">
|
||||||
<div class="item-child"> github开源地址:<el-button type="primary" link @click="toGitHub">点我</el-button></div>
|
<div class="item-child">
|
||||||
<div class="item-child"> github开源地址:<el-button type="primary" link @click="toGitHub">点我</el-button></div>
|
github开源地址:<el-button type="primary" link @click="toGitHub">点我</el-button></div
|
||||||
<div class="item-child"> github开源地址:<el-button type="primary" link @click="toGitHub">点我</el-button></div>
|
>
|
||||||
|
<div class="item-child">
|
||||||
|
github开源地址:<el-button type="primary" link @click="toGitHub">点我</el-button></div
|
||||||
|
>
|
||||||
|
<div class="item-child">
|
||||||
|
github开源地址:<el-button type="primary" link @click="toGitHub">点我</el-button></div
|
||||||
|
>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</div>
|
</div>
|
||||||
</el-popover>
|
</el-popover>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
@@ -44,7 +45,7 @@ const handleClick = (tab: TabsPaneContext, event: Event) => {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: all .3s;
|
transition: all 0.3s;
|
||||||
.item-info-pop {
|
.item-info-pop {
|
||||||
// width:100% ;
|
// width:100% ;
|
||||||
//height: 100%;
|
//height: 100%;
|
||||||
|
|||||||
@@ -1,7 +1,3 @@
|
|||||||
<template>
|
<template> </template>
|
||||||
|
|
||||||
</template>
|
<script lang="ts"></script>
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="g-right-click-menu" :style="style" v-if="isShow" ref="rightMenu">
|
<div class="g-right-click-menu" :style="style" v-if="isShow" ref="rightMenu">
|
||||||
<div
|
<div
|
||||||
v-for="item,index in data"
|
v-for="(item, index) in data"
|
||||||
:key="index"
|
:key="index"
|
||||||
class="operating" @click.stop="operatingRightAction($event,item)">{{item.label}}</div>
|
class="operating"
|
||||||
|
@click.stop="operatingRightAction($event, item)"
|
||||||
|
>{{ item.label }}</div
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
@@ -11,28 +14,28 @@ export default {
|
|||||||
props: {
|
props: {
|
||||||
data: {
|
data: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default:()=>[]
|
default: () => [],
|
||||||
},
|
},
|
||||||
left: {
|
left: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 0
|
default: 0,
|
||||||
},
|
},
|
||||||
type: {
|
type: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 1
|
default: 1,
|
||||||
},
|
},
|
||||||
dataInfo: {
|
dataInfo: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => {}
|
default: () => {},
|
||||||
},
|
},
|
||||||
top: {
|
top: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 0
|
default: 0,
|
||||||
},
|
},
|
||||||
isViewInfo: {
|
isViewInfo: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: true
|
default: true,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
left: {
|
left: {
|
||||||
@@ -40,10 +43,10 @@ export default {
|
|||||||
if (newName) {
|
if (newName) {
|
||||||
this.isShow = true
|
this.isShow = true
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
// 代表在wacth里声明了firstName这个方法之后立即先去执行handler方法
|
// 代表在wacth里声明了firstName这个方法之后立即先去执行handler方法
|
||||||
// immediate: true
|
// immediate: true
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
style() {
|
style() {
|
||||||
@@ -54,11 +57,11 @@ export default {
|
|||||||
} else {
|
} else {
|
||||||
return `left:${this.left}px;top:${this.top}px`
|
return `left:${this.left}px;top:${this.top}px`
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
isShow: false
|
isShow: false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -69,7 +72,7 @@ export default {
|
|||||||
operatingRightAction($event, val) {
|
operatingRightAction($event, val) {
|
||||||
this.$emit('ok', $event, val)
|
this.$emit('ok', $event, val)
|
||||||
this.isShow = false
|
this.isShow = false
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
let _self = this
|
let _self = this
|
||||||
@@ -81,7 +84,7 @@ export default {
|
|||||||
_self.isShow = false
|
_self.isShow = false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ const methodMap = [
|
|||||||
'webkitFullscreenEnabled',
|
'webkitFullscreenEnabled',
|
||||||
'webkitfullscreenchange',
|
'webkitfullscreenchange',
|
||||||
'webkitfullscreenerror',
|
'webkitfullscreenerror',
|
||||||
|
|
||||||
],
|
],
|
||||||
// Old WebKit
|
// Old WebKit
|
||||||
[
|
[
|
||||||
@@ -27,7 +26,6 @@ const methodMap = [
|
|||||||
'webkitCancelFullScreen',
|
'webkitCancelFullScreen',
|
||||||
'webkitfullscreenchange',
|
'webkitfullscreenchange',
|
||||||
'webkitfullscreenerror',
|
'webkitfullscreenerror',
|
||||||
|
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'mozRequestFullScreen',
|
'mozRequestFullScreen',
|
||||||
@@ -45,30 +43,30 @@ const methodMap = [
|
|||||||
'MSFullscreenChange',
|
'MSFullscreenChange',
|
||||||
'MSFullscreenError',
|
'MSFullscreenError',
|
||||||
],
|
],
|
||||||
];
|
]
|
||||||
|
|
||||||
const nativeAPI = (() => {
|
const nativeAPI = (() => {
|
||||||
const unprefixedMethods = methodMap[0];
|
const unprefixedMethods = methodMap[0]
|
||||||
const returnValue = {};
|
const returnValue = {}
|
||||||
|
|
||||||
for (const methodList of methodMap) {
|
for (const methodList of methodMap) {
|
||||||
const exitFullscreenMethod = methodList?.[1];
|
const exitFullscreenMethod = methodList?.[1]
|
||||||
if (exitFullscreenMethod in document) {
|
if (exitFullscreenMethod in document) {
|
||||||
for (const [index, method] of methodList.entries()) {
|
for (const [index, method] of methodList.entries()) {
|
||||||
returnValue[unprefixedMethods[index]] = method;
|
returnValue[unprefixedMethods[index]] = method
|
||||||
}
|
}
|
||||||
|
|
||||||
return returnValue;
|
return returnValue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false
|
||||||
})();
|
})()
|
||||||
|
|
||||||
const eventNameMap = {
|
const eventNameMap = {
|
||||||
change: nativeAPI.fullscreenchange,
|
change: nativeAPI.fullscreenchange,
|
||||||
error: nativeAPI.fullscreenerror,
|
error: nativeAPI.fullscreenerror,
|
||||||
};
|
}
|
||||||
|
|
||||||
// eslint-disable-next-line import/no-mutable-exports
|
// eslint-disable-next-line import/no-mutable-exports
|
||||||
let screenfull = {
|
let screenfull = {
|
||||||
@@ -76,63 +74,63 @@ let screenfull = {
|
|||||||
request(element = document.documentElement, options) {
|
request(element = document.documentElement, options) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const onFullScreenEntered = () => {
|
const onFullScreenEntered = () => {
|
||||||
screenfull.off('change', onFullScreenEntered);
|
screenfull.off('change', onFullScreenEntered)
|
||||||
resolve();
|
resolve()
|
||||||
};
|
}
|
||||||
|
|
||||||
screenfull.on('change', onFullScreenEntered);
|
screenfull.on('change', onFullScreenEntered)
|
||||||
|
|
||||||
const returnPromise = element[nativeAPI.requestFullscreen](options);
|
const returnPromise = element[nativeAPI.requestFullscreen](options)
|
||||||
|
|
||||||
if (returnPromise instanceof Promise) {
|
if (returnPromise instanceof Promise) {
|
||||||
returnPromise.then(onFullScreenEntered).catch(reject);
|
returnPromise.then(onFullScreenEntered).catch(reject)
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
},
|
},
|
||||||
exit() {
|
exit() {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (!screenfull.isFullscreen) {
|
if (!screenfull.isFullscreen) {
|
||||||
resolve();
|
resolve()
|
||||||
return;
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const onFullScreenExit = () => {
|
const onFullScreenExit = () => {
|
||||||
screenfull.off('change', onFullScreenExit);
|
screenfull.off('change', onFullScreenExit)
|
||||||
resolve();
|
resolve()
|
||||||
};
|
}
|
||||||
|
|
||||||
screenfull.on('change', onFullScreenExit);
|
screenfull.on('change', onFullScreenExit)
|
||||||
|
|
||||||
const returnPromise = document[nativeAPI.exitFullscreen]();
|
const returnPromise = document[nativeAPI.exitFullscreen]()
|
||||||
|
|
||||||
if (returnPromise instanceof Promise) {
|
if (returnPromise instanceof Promise) {
|
||||||
returnPromise.then(onFullScreenExit).catch(reject);
|
returnPromise.then(onFullScreenExit).catch(reject)
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
},
|
},
|
||||||
toggle(element, options) {
|
toggle(element, options) {
|
||||||
return screenfull.isFullscreen ? screenfull.exit() : screenfull.request(element, options);
|
return screenfull.isFullscreen ? screenfull.exit() : screenfull.request(element, options)
|
||||||
},
|
},
|
||||||
onchange(callback) {
|
onchange(callback) {
|
||||||
screenfull.on('change', callback);
|
screenfull.on('change', callback)
|
||||||
},
|
},
|
||||||
onerror(callback) {
|
onerror(callback) {
|
||||||
screenfull.on('error', callback);
|
screenfull.on('error', callback)
|
||||||
},
|
},
|
||||||
on(event, callback) {
|
on(event, callback) {
|
||||||
const eventName = eventNameMap[event];
|
const eventName = eventNameMap[event]
|
||||||
if (eventName) {
|
if (eventName) {
|
||||||
document.addEventListener(eventName, callback, false);
|
document.addEventListener(eventName, callback, false)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
off(event, callback) {
|
off(event, callback) {
|
||||||
const eventName = eventNameMap[event];
|
const eventName = eventNameMap[event]
|
||||||
if (eventName) {
|
if (eventName) {
|
||||||
document.removeEventListener(eventName, callback, false);
|
document.removeEventListener(eventName, callback, false)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
raw: nativeAPI,
|
raw: nativeAPI,
|
||||||
};
|
}
|
||||||
|
|
||||||
Object.defineProperties(screenfull, {
|
Object.defineProperties(screenfull, {
|
||||||
isFullscreen: {
|
isFullscreen: {
|
||||||
@@ -147,11 +145,10 @@ Object.defineProperties(screenfull, {
|
|||||||
// Coerce to boolean in case of old WebKit.
|
// Coerce to boolean in case of old WebKit.
|
||||||
get: () => Boolean(document[nativeAPI.fullscreenEnabled]),
|
get: () => Boolean(document[nativeAPI.fullscreenEnabled]),
|
||||||
},
|
},
|
||||||
});
|
})
|
||||||
|
|
||||||
if (!nativeAPI) {
|
if (!nativeAPI) {
|
||||||
screenfull = {isEnabled: false};
|
screenfull = { isEnabled: false }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export default screenfull
|
||||||
export default screenfull;
|
|
||||||
|
|||||||
@@ -4,22 +4,23 @@
|
|||||||
class="full-screen"
|
class="full-screen"
|
||||||
title="全屏"
|
title="全屏"
|
||||||
@click.stop="click"
|
@click.stop="click"
|
||||||
style="margin-right: 10px;cursor: pointer" ><full-screen /></el-icon>
|
style="margin-right: 10px; cursor: pointer"
|
||||||
|
><full-screen
|
||||||
|
/></el-icon>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import screenfull from './index'
|
import screenfull from './index'
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
import {onBeforeUnmount, onMounted, ref} from "vue";
|
import { onBeforeUnmount, onMounted, ref } from 'vue'
|
||||||
|
|
||||||
|
|
||||||
let isFullscreen = ref(false)
|
let isFullscreen = ref(false)
|
||||||
const click = () => {
|
const click = () => {
|
||||||
if (!screenfull.isEnabled) {
|
if (!screenfull.isEnabled) {
|
||||||
ElMessage({
|
ElMessage({
|
||||||
message: '你的浏览器不支持',
|
message: '你的浏览器不支持',
|
||||||
type: 'warning'
|
type: 'warning',
|
||||||
})
|
})
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -57,7 +58,7 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: all .3s;
|
transition: all 0.3s;
|
||||||
}
|
}
|
||||||
.transverseMenu {
|
.transverseMenu {
|
||||||
.full-screen {
|
.full-screen {
|
||||||
|
|||||||
@@ -7,9 +7,7 @@
|
|||||||
主题配置
|
主题配置
|
||||||
</div>
|
</div>
|
||||||
<div class="item-child item-child2" @click="operator(2)">
|
<div class="item-child item-child2" @click="operator(2)">
|
||||||
<el-icon size="30"
|
<el-icon size="30" color="#3698fd" style="margin-bottom: 8px"><Link /></el-icon>
|
||||||
color="#3698fd"
|
|
||||||
style="margin-bottom: 8px"><Link /></el-icon>
|
|
||||||
源码拷贝
|
源码拷贝
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -17,7 +15,12 @@
|
|||||||
<el-drawer v-model="drawer" title="主题配置" size="300px">
|
<el-drawer v-model="drawer" title="主题配置" size="300px">
|
||||||
<div class="drawer-item">
|
<div class="drawer-item">
|
||||||
<label>布局</label>
|
<label>布局</label>
|
||||||
<el-select v-model="layout" placeholder="请选择" style="width: 150px" @change="(val)=>changeSwitch(val,2)">
|
<el-select
|
||||||
|
v-model="layout"
|
||||||
|
placeholder="请选择"
|
||||||
|
style="width: 150px"
|
||||||
|
@change="(val) => changeSwitch(val, 2)"
|
||||||
|
>
|
||||||
<el-option label="纵向" value="vertical"></el-option>
|
<el-option label="纵向" value="vertical"></el-option>
|
||||||
<el-option label="横向" value="horizontal"></el-option>
|
<el-option label="横向" value="horizontal"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
@@ -35,7 +38,7 @@
|
|||||||
const drawer = ref(false)
|
const drawer = ref(false)
|
||||||
const tag = ref(true)
|
const tag = ref(true)
|
||||||
const layout = ref('vertical')
|
const layout = ref('vertical')
|
||||||
import {useStore} from "vuex";
|
import { useStore } from 'vuex'
|
||||||
|
|
||||||
const store = useStore()
|
const store = useStore()
|
||||||
const operator = (type) => {
|
const operator = (type) => {
|
||||||
@@ -49,7 +52,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const changeSwitch = (val, type) => {
|
const changeSwitch = (val, type) => {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
// 是否显示tag
|
// 是否显示tag
|
||||||
@@ -61,10 +63,8 @@
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.m-setting-fix {
|
.m-setting-fix {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
@@ -105,16 +105,16 @@
|
|||||||
border-radius: 5.5px;
|
border-radius: 5.5px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
background: #ebf5ff;
|
background: #ebf5ff;
|
||||||
transition: color .15s ease,background-color .15s ease,border-color .15s ease,box-shadow .15s ease;
|
transition: color 0.15s ease, background-color 0.15s ease, border-color 0.15s ease,
|
||||||
|
box-shadow 0.15s ease;
|
||||||
}
|
}
|
||||||
.item-child2 {
|
.item-child2 {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
color: #b37feb;
|
color: #b37feb;
|
||||||
background: #f7f2fd;
|
background: #f7f2fd;
|
||||||
transition: color .15s ease,background-color .15s ease,border-color .15s ease,box-shadow .15s ease;
|
transition: color 0.15s ease, background-color 0.15s ease, border-color 0.15s ease,
|
||||||
|
box-shadow 0.15s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
.drawer-item {
|
.drawer-item {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|||||||
@@ -21,26 +21,24 @@
|
|||||||
import { Plus } from '@element-plus/icons-vue'
|
import { Plus } from '@element-plus/icons-vue'
|
||||||
|
|
||||||
import type { UploadProps, UploadUserFile } from 'element-plus'
|
import type { UploadProps, UploadUserFile } from 'element-plus'
|
||||||
import {ElMessage} from "element-plus";
|
import { ElMessage } from 'element-plus'
|
||||||
let emit = defineEmits(['update'])
|
let emit = defineEmits(['update'])
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
modelValue: Array,
|
modelValue: Array,
|
||||||
multiple: {
|
multiple: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default:true
|
default: true,
|
||||||
},
|
},
|
||||||
listType: {
|
listType: {
|
||||||
type: String,
|
type: String,
|
||||||
default:'picture-card'
|
default: 'picture-card',
|
||||||
},
|
},
|
||||||
showFileList: {
|
showFileList: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default:true
|
default: true,
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
let fileList = ref([
|
let fileList = ref([])
|
||||||
|
|
||||||
])
|
|
||||||
|
|
||||||
const dialogImageUrl = ref('')
|
const dialogImageUrl = ref('')
|
||||||
const dialogVisible = ref(false)
|
const dialogVisible = ref(false)
|
||||||
@@ -52,14 +50,14 @@
|
|||||||
const beforeUploadAction = (file, fileLi) => {
|
const beforeUploadAction = (file, fileLi) => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
var reader = new FileReader()
|
var reader = new FileReader()
|
||||||
let reg = (/\.jpg$|\.jpeg$|\.gif$|\.png$/i)
|
let reg = /\.jpg$|\.jpeg$|\.gif$|\.png$/i
|
||||||
reader.readAsDataURL(file)
|
reader.readAsDataURL(file)
|
||||||
let name = file.name
|
let name = file.name
|
||||||
if (reg.test(name)) {
|
if (reg.test(name)) {
|
||||||
reader.onload = (e: FileReader) => {
|
reader.onload = (e: FileReader) => {
|
||||||
fileList.value.push({
|
fileList.value.push({
|
||||||
name: name,
|
name: name,
|
||||||
url:e.target.result
|
url: e.target.result,
|
||||||
})
|
})
|
||||||
emit('update', fileList.value)
|
emit('update', fileList.value)
|
||||||
resolve(e.target.result)
|
resolve(e.target.result)
|
||||||
@@ -77,10 +75,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
watch(()=>props.modelValue,(value)=>{
|
watch(
|
||||||
|
() => props.modelValue,
|
||||||
|
(value) => {
|
||||||
fileList.value = value
|
fileList.value = value
|
||||||
},{
|
},
|
||||||
immediate:true
|
{
|
||||||
})
|
immediate: true,
|
||||||
|
},
|
||||||
|
)
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -6,15 +6,14 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
// 引入 wangEditor
|
// 引入 wangEditor
|
||||||
import wangEditor from 'wangeditor'
|
import wangEditor from 'wangeditor'
|
||||||
import {onBeforeUnmount, onMounted, watch} from "vue";
|
import { onBeforeUnmount, onMounted, watch } from 'vue'
|
||||||
let editors = null
|
let editors = null
|
||||||
|
|
||||||
let emit = defineEmits(['update:modelValue'])
|
let emit = defineEmits(['update:modelValue'])
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
modelValue:String
|
modelValue: String,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
const getEditorData = () => {
|
const getEditorData = () => {
|
||||||
// 通过代码获取编辑器内容
|
// 通过代码获取编辑器内容
|
||||||
let data = editors.txt.html()
|
let data = editors.txt.html()
|
||||||
@@ -22,9 +21,12 @@ const getEditorData = () =>{
|
|||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
watch(()=>props.modelValue,(value)=>{
|
watch(
|
||||||
|
() => props.modelValue,
|
||||||
|
(value) => {
|
||||||
editors.txt.html(value)
|
editors.txt.html(value)
|
||||||
})
|
},
|
||||||
|
)
|
||||||
const editor = new wangEditor(`#wangEditor`)
|
const editor = new wangEditor(`#wangEditor`)
|
||||||
// 配置 onchange 回调函数,将数据同步到 vue 中
|
// 配置 onchange 回调函数,将数据同步到 vue 中
|
||||||
editor.config.onchange = (newHtml) => {
|
editor.config.onchange = (newHtml) => {
|
||||||
@@ -41,8 +43,5 @@ onBeforeUnmount(()=>{
|
|||||||
editors.destroy()
|
editors.destroy()
|
||||||
editors = null
|
editors = null
|
||||||
})
|
})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<style>
|
<style></style>
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ console.log(11111111)
|
|||||||
// const req = require.context('./svg', false, /\.svg$/)
|
// const req = require.context('./svg', false, /\.svg$/)
|
||||||
const req = import.meta.globEager('./svg/*.svg')
|
const req = import.meta.globEager('./svg/*.svg')
|
||||||
consoole.log('req', req)
|
consoole.log('req', req)
|
||||||
const requireAll = requireContext => requireContext.keys().map(requireContext)
|
const requireAll = (requireContext) => requireContext.keys().map(requireContext)
|
||||||
requireAll(req)
|
requireAll(req)
|
||||||
|
|
||||||
export default SvgIcon
|
export default SvgIcon
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ export default {
|
|||||||
props: {
|
props: {
|
||||||
to: {
|
to: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
isExternal() {
|
isExternal() {
|
||||||
@@ -23,7 +23,7 @@ export default {
|
|||||||
return 'a'
|
return 'a'
|
||||||
}
|
}
|
||||||
return 'router-link'
|
return 'router-link'
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
linkProps(to) {
|
linkProps(to) {
|
||||||
@@ -31,14 +31,14 @@ export default {
|
|||||||
return {
|
return {
|
||||||
href: to,
|
href: to,
|
||||||
target: '_blank',
|
target: '_blank',
|
||||||
rel: 'noopener'
|
rel: 'noopener',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
to: to
|
to: to,
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="sidebar-logo-container" :class="{'collapse':isCollapse}">
|
<div class="sidebar-logo-container" :class="{ collapse: isCollapse }">
|
||||||
<transition name="sidebarLogoFade">
|
<transition name="sidebarLogoFade">
|
||||||
<router-link v-if="isCollapse" key="collapse" class="sidebar-logo-link" to="/">
|
<router-link v-if="isCollapse" key="collapse" class="sidebar-logo-link" to="/">
|
||||||
<img v-if="logo" :src="logo" class="sidebar-logo">
|
<img v-if="logo" :src="logo" class="sidebar-logo" />
|
||||||
<h1 v-else class="sidebar-title">Perfect </h1>
|
<h1 v-else class="sidebar-title">Perfect </h1>
|
||||||
</router-link>
|
</router-link>
|
||||||
<router-link v-else key="expand" class="sidebar-logo-link" to="/">
|
<router-link v-else key="expand" class="sidebar-logo-link" to="/">
|
||||||
<img v-if="logo" :src="logo" class="sidebar-logo">
|
<img v-if="logo" :src="logo" class="sidebar-logo" />
|
||||||
<h1 class="sidebar-title"> {{ title }}</h1>
|
<h1 class="sidebar-title"> {{ title }}</h1>
|
||||||
</router-link>
|
</router-link>
|
||||||
</transition>
|
</transition>
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import {computed, reactive, ref} from "vue";
|
import { computed, reactive, ref } from 'vue'
|
||||||
import { useStore } from 'vuex' // useStore ===vue2.0中的this.$store
|
import { useStore } from 'vuex' // useStore ===vue2.0中的this.$store
|
||||||
import logo from '@/assets/logo.png'
|
import logo from '@/assets/logo.png'
|
||||||
|
|
||||||
@@ -24,7 +24,6 @@ const title = ref<string>('Vue Admin Perfect')
|
|||||||
const isCollapse = computed(() => {
|
const isCollapse = computed(() => {
|
||||||
return !store.state.app.isCollapse
|
return !store.state.app.isCollapse
|
||||||
})
|
})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|||||||
@@ -33,17 +33,17 @@
|
|||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
item: {
|
item: {
|
||||||
type: Object,
|
type: Object,
|
||||||
required: true
|
required: true,
|
||||||
},
|
},
|
||||||
basePath: {
|
basePath: {
|
||||||
type: String,
|
type: String,
|
||||||
default: ''
|
default: '',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const onlyOneChild = ref(null)
|
const onlyOneChild = ref(null)
|
||||||
const hasOneShowingChild = (children = [], parent) => {
|
const hasOneShowingChild = (children = [], parent) => {
|
||||||
const showingChildren = children.filter(item => {
|
const showingChildren = children.filter((item) => {
|
||||||
// 过滤掉需要隐藏的菜单
|
// 过滤掉需要隐藏的菜单
|
||||||
if (item.hidden) {
|
if (item.hidden) {
|
||||||
return false
|
return false
|
||||||
@@ -67,7 +67,6 @@
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const resolvePath = (routePath) => {
|
const resolvePath = (routePath) => {
|
||||||
if (isExternal(routePath)) {
|
if (isExternal(routePath)) {
|
||||||
return routePath
|
return routePath
|
||||||
@@ -77,5 +76,4 @@
|
|||||||
}
|
}
|
||||||
return path.resolve(props.basePath, routePath)
|
return path.resolve(props.basePath, routePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -9,7 +9,12 @@
|
|||||||
class="el-menu-vertical-demo"
|
class="el-menu-vertical-demo"
|
||||||
:collapse="isCollapse"
|
:collapse="isCollapse"
|
||||||
>
|
>
|
||||||
<sidebar-item v-for="route in permission_routes" :key="route.path" :item="route" :base-path="route.path"/>
|
<sidebar-item
|
||||||
|
v-for="route in permission_routes"
|
||||||
|
:key="route.path"
|
||||||
|
:item="route"
|
||||||
|
:base-path="route.path"
|
||||||
|
/>
|
||||||
</el-menu>
|
</el-menu>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -7,43 +7,43 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, computed, watch, onMounted,nextTick } from 'vue';
|
import { ref, computed, watch, onMounted, nextTick } from 'vue'
|
||||||
import { useElementSize } from '@vueuse/core';
|
import { useElementSize } from '@vueuse/core'
|
||||||
import BScroll from '@better-scroll/core';
|
import BScroll from '@better-scroll/core'
|
||||||
import type { Options } from '@better-scroll/core';
|
import type { Options } from '@better-scroll/core'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
/** better-scroll的配置: https://better-scroll.github.io/docs/zh-CN/guide/base-scroll-options.html */
|
/** better-scroll的配置: https://better-scroll.github.io/docs/zh-CN/guide/base-scroll-options.html */
|
||||||
options: Options;
|
options: Options
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = defineProps<Props>();
|
const props = defineProps<Props>()
|
||||||
|
|
||||||
const bsWrap = ref<HTMLElement>();
|
const bsWrap = ref<HTMLElement>()
|
||||||
const instance = ref<BScroll>();
|
const instance = ref<BScroll>()
|
||||||
const bsContent = ref<HTMLElement>();
|
const bsContent = ref<HTMLElement>()
|
||||||
|
|
||||||
function initBetterScroll() {
|
function initBetterScroll() {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
instance.value = new BScroll(bsWrap.value, props.options);
|
instance.value = new BScroll(bsWrap.value, props.options)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 滚动元素发生变化,刷新BS
|
// 滚动元素发生变化,刷新BS
|
||||||
const { width: wrapWidth } = useElementSize(bsWrap);
|
const { width: wrapWidth } = useElementSize(bsWrap)
|
||||||
|
|
||||||
const { width, height } = useElementSize(bsContent);
|
const { width, height } = useElementSize(bsContent)
|
||||||
watch([() => wrapWidth.value, () => width.value, () => height.value], () => {
|
watch([() => wrapWidth.value, () => width.value, () => height.value], () => {
|
||||||
if (instance.value) {
|
if (instance.value) {
|
||||||
instance.value.refresh();
|
instance.value.refresh()
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
initBetterScroll();
|
initBetterScroll()
|
||||||
});
|
})
|
||||||
|
|
||||||
defineExpose({ instance });
|
defineExpose({ instance })
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.tags-scroll-wrap {
|
.tags-scroll-wrap {
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="tags-wrap-container">
|
<div class="tags-wrap-container">
|
||||||
<div class="tags-view" ref="scrollContainer">
|
<div class="tags-view" ref="scrollContainer">
|
||||||
<better-scroll :options="{ scrollX: true, scrollY: false, }" ref="bsScroll">
|
<better-scroll :options="{ scrollX: true, scrollY: false }" ref="bsScroll">
|
||||||
<div class="tags-scroll-inner">
|
<div class="tags-scroll-inner">
|
||||||
<div v-for="tag in visitedViews"
|
<div
|
||||||
|
v-for="tag in visitedViews"
|
||||||
:ref="setTagRef"
|
:ref="setTagRef"
|
||||||
:path="tag.path"
|
:path="tag.path"
|
||||||
:data-id="tag.path"
|
:data-id="tag.path"
|
||||||
@@ -12,33 +13,28 @@
|
|||||||
:key="tag.path"
|
:key="tag.path"
|
||||||
class="item-tag-wrap"
|
class="item-tag-wrap"
|
||||||
:class="isActive(tag) ? 'active' : ''"
|
:class="isActive(tag) ? 'active' : ''"
|
||||||
@click="routerGo(tag)">
|
@click="routerGo(tag)"
|
||||||
|
>
|
||||||
<div class="tags-view-item">{{ tag.title }}</div>
|
<div class="tags-view-item">{{ tag.title }}</div>
|
||||||
<el-icon @click.prevent.stop="(e) => closeSelectedTag(e, tag)" class="tag-icon">
|
<el-icon @click.prevent.stop="(e) => closeSelectedTag(e, tag)" class="tag-icon">
|
||||||
<circle-close-filled /></el-icon>
|
<circle-close-filled
|
||||||
|
/></el-icon>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</better-scroll>
|
</better-scroll>
|
||||||
</div>
|
</div>
|
||||||
<el-tooltip
|
<el-tooltip class="box-item" effect="dark" content="点击刷新" placement="bottom-end">
|
||||||
class="box-item"
|
|
||||||
effect="dark"
|
|
||||||
content="点击刷新"
|
|
||||||
placement="bottom-end"
|
|
||||||
>
|
|
||||||
<div class="refresh" @click="refresh">
|
<div class="refresh" @click="refresh">
|
||||||
<div class="refresh-inner">
|
<div class="refresh-inner">
|
||||||
<el-icon><Refresh />
|
<el-icon><Refresh /> </el-icon> </div
|
||||||
</el-icon>
|
></div>
|
||||||
</div></div>
|
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import {computed, nextTick, onMounted, reactive, ref, watch} from "vue";
|
import { computed, nextTick, onMounted, reactive, ref, watch } from 'vue'
|
||||||
import betterScroll from "./betterScroll.vue";
|
import betterScroll from './betterScroll.vue'
|
||||||
import { useStore } from 'vuex'
|
import { useStore } from 'vuex'
|
||||||
import { useRoute, useRouter } from 'vue-router'
|
import { useRoute, useRouter } from 'vue-router'
|
||||||
|
|
||||||
@@ -59,7 +55,7 @@
|
|||||||
return store.state.tagsView.visitedViews
|
return store.state.tagsView.visitedViews
|
||||||
})
|
})
|
||||||
|
|
||||||
const bsScroll = ref<Expose.BetterScroll>();
|
const bsScroll = ref<Expose.BetterScroll>()
|
||||||
let obj = new WeakMap()
|
let obj = new WeakMap()
|
||||||
|
|
||||||
let affixTags = ref([])
|
let affixTags = ref([])
|
||||||
@@ -79,14 +75,14 @@
|
|||||||
|
|
||||||
function filterAffixTags(routes, basePath = '/') {
|
function filterAffixTags(routes, basePath = '/') {
|
||||||
let tags = []
|
let tags = []
|
||||||
routes.forEach(route => {
|
routes.forEach((route) => {
|
||||||
if (route.meta && route.meta.affix) {
|
if (route.meta && route.meta.affix) {
|
||||||
const tagPath = path.resolve(basePath, route.path)
|
const tagPath = path.resolve(basePath, route.path)
|
||||||
tags.push({
|
tags.push({
|
||||||
fullPath: tagPath,
|
fullPath: tagPath,
|
||||||
path: tagPath,
|
path: tagPath,
|
||||||
name: route.name,
|
name: route.name,
|
||||||
meta: { ...route.meta }
|
meta: { ...route.meta },
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if (route.children) {
|
if (route.children) {
|
||||||
@@ -101,7 +97,7 @@
|
|||||||
|
|
||||||
const initTags = () => {
|
const initTags = () => {
|
||||||
let routesNew = routes.value
|
let routesNew = routes.value
|
||||||
let affixTag = affixTags.value = filterAffixTags(routesNew)
|
let affixTag = (affixTags.value = filterAffixTags(routesNew))
|
||||||
for (const tag of affixTag) {
|
for (const tag of affixTag) {
|
||||||
if (tag.name) {
|
if (tag.name) {
|
||||||
store.dispatch('tagsView/addVisitedView', tag)
|
store.dispatch('tagsView/addVisitedView', tag)
|
||||||
@@ -146,7 +142,6 @@
|
|||||||
store.dispatch('tagsView/delView', view).then(({ visitedViews }) => {
|
store.dispatch('tagsView/delView', view).then(({ visitedViews }) => {
|
||||||
if (isActive(view)) {
|
if (isActive(view)) {
|
||||||
toLastView(visitedViews, view)
|
toLastView(visitedViews, view)
|
||||||
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -161,14 +156,14 @@
|
|||||||
function handleScrollAction(currentTag) {
|
function handleScrollAction(currentTag) {
|
||||||
const scrollContainerRect = scrollContainer.value.getBoundingClientRect()
|
const scrollContainerRect = scrollContainer.value.getBoundingClientRect()
|
||||||
let { left: currx, width: currentWidth } = currentTag.getBoundingClientRect()
|
let { left: currx, width: currentWidth } = currentTag.getBoundingClientRect()
|
||||||
const clientX = currx + currentWidth / 2;
|
const clientX = currx + currentWidth / 2
|
||||||
const currentX = clientX - scrollContainerRect.left;
|
const currentX = clientX - scrollContainerRect.left
|
||||||
const deltaX = currentX - scrollContainerRect.width / 2;
|
const deltaX = currentX - scrollContainerRect.width / 2
|
||||||
if (bsScroll.value) {
|
if (bsScroll.value) {
|
||||||
const { maxScrollX, x: leftX } = bsScroll.value.instance;
|
const { maxScrollX, x: leftX } = bsScroll.value.instance
|
||||||
const rightX = maxScrollX - leftX;
|
const rightX = maxScrollX - leftX
|
||||||
const update = deltaX > 0 ? Math.max(-deltaX, rightX) : Math.min(-deltaX, -leftX);
|
const update = deltaX > 0 ? Math.max(-deltaX, rightX) : Math.min(-deltaX, -leftX)
|
||||||
bsScroll.value?.instance.scrollBy(update, 0, 300);
|
bsScroll.value?.instance.scrollBy(update, 0, 300)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,7 +184,6 @@
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
initTags()
|
initTags()
|
||||||
addTags()
|
addTags()
|
||||||
@@ -199,7 +193,6 @@
|
|||||||
}, 50)
|
}, 50)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
watch(route, () => {
|
watch(route, () => {
|
||||||
addTags()
|
addTags()
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
@@ -210,15 +203,16 @@
|
|||||||
})
|
})
|
||||||
|
|
||||||
router.beforeEach(async (to, from, next) => {
|
router.beforeEach(async (to, from, next) => {
|
||||||
if((from.fullPath==='/error/404'||from.fullPath==='/error/401')&&to.fullPath==="/home") {
|
if (
|
||||||
|
(from.fullPath === '/error/404' || from.fullPath === '/error/401') &&
|
||||||
|
to.fullPath === '/home'
|
||||||
|
) {
|
||||||
let whiteList = ['/error/404', '/error/401']
|
let whiteList = ['/error/404', '/error/401']
|
||||||
await store.dispatch('tagsView/removeView', whiteList)
|
await store.dispatch('tagsView/removeView', whiteList)
|
||||||
}
|
}
|
||||||
next()
|
next()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|||||||
@@ -1,9 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog
|
<el-dialog v-model="dialogVisible" title="修改密码" width="60%">
|
||||||
v-model="dialogVisible"
|
|
||||||
title="修改密码"
|
|
||||||
width="60%"
|
|
||||||
>
|
|
||||||
<el-form
|
<el-form
|
||||||
ref="ruleFormRef"
|
ref="ruleFormRef"
|
||||||
:model="ruleForm"
|
:model="ruleForm"
|
||||||
@@ -25,16 +21,14 @@
|
|||||||
<template #footer>
|
<template #footer>
|
||||||
<span class="dialog-footer">
|
<span class="dialog-footer">
|
||||||
<el-button @click="dialogVisible = false">取消</el-button>
|
<el-button @click="dialogVisible = false">取消</el-button>
|
||||||
<el-button type="primary" @click="submitForm(ruleFormRef)"
|
<el-button type="primary" @click="submitForm(ruleFormRef)">确定</el-button>
|
||||||
>确定</el-button
|
|
||||||
>
|
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref,defineExpose,reactive, } from 'vue'
|
import { ref, defineExpose, reactive } from 'vue'
|
||||||
import { ElMessageBox } from 'element-plus'
|
import { ElMessageBox } from 'element-plus'
|
||||||
import type { ElForm } from 'element-plus'
|
import type { ElForm } from 'element-plus'
|
||||||
const dialogVisible = ref(false)
|
const dialogVisible = ref(false)
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
class="m-layout-header"
|
class="m-layout-header"
|
||||||
:style="{left:`${mode==='horizontal'?0:isCollapse?'56':'210'}px`}">
|
:style="{ left: `${mode === 'horizontal' ? 0 : isCollapse ? '56' : '210'}px` }"
|
||||||
<div class="header" :class="{
|
>
|
||||||
transverseMenu:mode==='horizontal'
|
<div
|
||||||
}">
|
class="header"
|
||||||
|
:class="{
|
||||||
|
transverseMenu: mode === 'horizontal',
|
||||||
|
}"
|
||||||
|
>
|
||||||
<menu-slide v-if="mode === 'horizontal'" />
|
<menu-slide v-if="mode === 'horizontal'" />
|
||||||
<div class="left" v-if="mode === 'vertical'">
|
<div class="left" v-if="mode === 'vertical'">
|
||||||
<div>
|
<div>
|
||||||
@@ -18,7 +22,9 @@
|
|||||||
<u-screen-full />
|
<u-screen-full />
|
||||||
<el-dropdown @command="commandAction">
|
<el-dropdown @command="commandAction">
|
||||||
<span class="el-dropdown-link">
|
<span class="el-dropdown-link">
|
||||||
<el-avatar :icon="UserFilled" :size="30" style="margin-right: 6px"/>{{ userInfo.username }}
|
<el-avatar :icon="UserFilled" :size="30" style="margin-right: 6px" />{{
|
||||||
|
userInfo.username
|
||||||
|
}}
|
||||||
<el-icon class="el-icon--right">
|
<el-icon class="el-icon--right">
|
||||||
<arrow-down />
|
<arrow-down />
|
||||||
</el-icon>
|
</el-icon>
|
||||||
@@ -41,14 +47,14 @@
|
|||||||
import { UserFilled } from '@element-plus/icons-vue'
|
import { UserFilled } from '@element-plus/icons-vue'
|
||||||
import Personal from './Personal.vue'
|
import Personal from './Personal.vue'
|
||||||
import TagViews from '../TagsView/index.vue'
|
import TagViews from '../TagsView/index.vue'
|
||||||
import UHamburger from "@/components/u-Hamburger/index.vue"
|
import UHamburger from '@/components/u-Hamburger/index.vue'
|
||||||
import UScreenFull from '@/components/u-screenfull/index.vue'
|
import UScreenFull from '@/components/u-screenfull/index.vue'
|
||||||
import UInfo from '@/components/u-info/index.vue'
|
import UInfo from '@/components/u-info/index.vue'
|
||||||
import MenuSlide from '../Sidebar/menuSlide.vue'
|
import MenuSlide from '../Sidebar/menuSlide.vue'
|
||||||
import {computed, ref,} from 'vue'
|
import { computed, ref } from 'vue'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
import { ElMessageBox, ElMessage } from 'element-plus'
|
import { ElMessageBox, ElMessage } from 'element-plus'
|
||||||
import {useStore} from "vuex";
|
import { useStore } from 'vuex'
|
||||||
|
|
||||||
const store = useStore()
|
const store = useStore()
|
||||||
const person = ref()
|
const person = ref()
|
||||||
@@ -69,40 +75,31 @@
|
|||||||
return store.state.user.userInfo
|
return store.state.user.userInfo
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
const logOut = async () => {
|
const logOut = async () => {
|
||||||
ElMessageBox.confirm(
|
ElMessageBox.confirm('确定退出登录吗?', '退出登录', {
|
||||||
'确定退出登录吗?',
|
|
||||||
'退出登录',
|
|
||||||
{
|
|
||||||
confirmButtonText: '确定',
|
confirmButtonText: '确定',
|
||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
}
|
})
|
||||||
)
|
|
||||||
.then(async () => {
|
.then(async () => {
|
||||||
try {
|
try {
|
||||||
await store.dispatch('user/logout')
|
await store.dispatch('user/logout')
|
||||||
router.push({ path: '/login' })
|
router.push({ path: '/login' })
|
||||||
store.dispatch('permission/clearRoutes')
|
store.dispatch('permission/clearRoutes')
|
||||||
store.dispatch('tagsView/clearVisitedView')
|
store.dispatch('tagsView/clearVisitedView')
|
||||||
}catch (e) {
|
} catch (e) {}
|
||||||
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
.catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
const commandAction = (key: number) => {
|
const commandAction = (key: number) => {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case 1:
|
case 1:
|
||||||
logOut()
|
logOut()
|
||||||
break;
|
break
|
||||||
case 2:
|
case 2:
|
||||||
person.value.show()
|
person.value.show()
|
||||||
break;
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const handleCollapse = () => {
|
const handleCollapse = () => {
|
||||||
@@ -161,5 +158,4 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -2,9 +2,12 @@
|
|||||||
<div class="g-container-layout" :class="classObj">
|
<div class="g-container-layout" :class="classObj">
|
||||||
<div v-if="device === 'mobile' && !isCollapse" class="drawer-bg" @click="handleClickOutside" />
|
<div v-if="device === 'mobile' && !isCollapse" class="drawer-bg" @click="handleClickOutside" />
|
||||||
<sidebar class="sidebar-container" v-if="mode === 'vertical'" />
|
<sidebar class="sidebar-container" v-if="mode === 'vertical'" />
|
||||||
<div class="main-container" :class="{
|
<div
|
||||||
hideSliderLayout:mode==='horizontal'
|
class="main-container"
|
||||||
}">
|
:class="{
|
||||||
|
hideSliderLayout: mode === 'horizontal',
|
||||||
|
}"
|
||||||
|
>
|
||||||
<u-header />
|
<u-header />
|
||||||
<div class="m-container-content" :class="{ 'app-main-hide-tag': !isShowTag }">
|
<div class="m-container-content" :class="{ 'app-main-hide-tag': !isShowTag }">
|
||||||
<app-main />
|
<app-main />
|
||||||
@@ -14,13 +17,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import {computed, defineComponent, ref} from 'vue';
|
import { computed, defineComponent, ref } from 'vue'
|
||||||
import Sidebar from './components/Sidebar/index.vue'
|
import Sidebar from './components/Sidebar/index.vue'
|
||||||
import UHeader from './components/UHeader/index.vue'
|
import UHeader from './components/UHeader/index.vue'
|
||||||
import AppMain from './components/AppMain.vue'
|
import AppMain from './components/AppMain.vue'
|
||||||
import { useResizeHandler } from './hooks/useResizeHandler'
|
import { useResizeHandler } from './hooks/useResizeHandler'
|
||||||
|
|
||||||
import {useStore} from "vuex";
|
import { useStore } from 'vuex'
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'layout',
|
name: 'layout',
|
||||||
@@ -42,7 +45,7 @@
|
|||||||
hideSidebar: !store.state.app.isCollapse,
|
hideSidebar: !store.state.app.isCollapse,
|
||||||
openSidebar: store.state.app.isCollapse,
|
openSidebar: store.state.app.isCollapse,
|
||||||
withoutAnimation: store.state.app.withoutAnimation,
|
withoutAnimation: store.state.app.withoutAnimation,
|
||||||
mobile: device.value === 'mobile'
|
mobile: device.value === 'mobile',
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const handleClickOutside = () => {
|
const handleClickOutside = () => {
|
||||||
@@ -61,10 +64,10 @@
|
|||||||
classObj,
|
classObj,
|
||||||
isShowTag,
|
isShowTag,
|
||||||
mode,
|
mode,
|
||||||
handleClickOutside
|
handleClickOutside,
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
});
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@@ -77,7 +80,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
flex-direction: column
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
&.mobile.openSidebar {
|
&.mobile.openSidebar {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
@import './variables.scss';
|
@import './variables.scss';
|
||||||
@import './sidebar.scss';
|
@import './sidebar.scss';
|
||||||
@import "./transition.scss";
|
@import './transition.scss';
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
#app {
|
#app {
|
||||||
|
|
||||||
.main-container {
|
.main-container {
|
||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
transition: margin-left .28s;
|
transition: margin-left 0.28s;
|
||||||
margin-left: $sideBarWidth;
|
margin-left: $sideBarWidth;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
@@ -173,7 +172,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.sidebar-container {
|
.sidebar-container {
|
||||||
transition: transform .28s;
|
transition: transform 0.28s;
|
||||||
width: $sideBarWidth !important;
|
width: $sideBarWidth !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,7 +186,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.withoutAnimation {
|
.withoutAnimation {
|
||||||
|
|
||||||
.main-container,
|
.main-container,
|
||||||
.sidebar-container {
|
.sidebar-container {
|
||||||
transition: none;
|
transition: none;
|
||||||
|
|||||||
@@ -27,7 +27,6 @@
|
|||||||
transform: translateX(20px);
|
transform: translateX(20px);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 面包屑动画
|
// 面包屑动画
|
||||||
.breadcrumb-enter-active {
|
.breadcrumb-enter-active {
|
||||||
transition: all 0.25s;
|
transition: all 0.25s;
|
||||||
@@ -38,8 +37,6 @@
|
|||||||
transform: translateX(30px) skewX(-50deg);
|
transform: translateX(30px) skewX(-50deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.fade-transform-leave-active,
|
.fade-transform-leave-active,
|
||||||
.fade-transform-enter-active {
|
.fade-transform-enter-active {
|
||||||
transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), border 0s;
|
transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), border 0s;
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
// base color
|
// base color
|
||||||
$blue: #324157;
|
$blue: #324157;
|
||||||
$light-blue:#3A71A8;
|
$light-blue: #3a71a8;
|
||||||
$red:#C03639;
|
$red: #c03639;
|
||||||
$pink: #E65D6E;
|
$pink: #e65d6e;
|
||||||
$green: #30B08F;
|
$green: #30b08f;
|
||||||
$tiffany: #4AB7BD;
|
$tiffany: #4ab7bd;
|
||||||
$yellow:#FEC171;
|
$yellow: #fec171;
|
||||||
$panGreen: #30B08F;
|
$panGreen: #30b08f;
|
||||||
|
|
||||||
// sidebar
|
// sidebar
|
||||||
$menuText: #bfcbd9;
|
$menuText: #bfcbd9;
|
||||||
$menuActiveText:#409EFF;
|
$menuActiveText: #409eff;
|
||||||
$subMenuActiveText: #f4f4f5; // https://github.com/ElemeFE/element/issues/12951
|
$subMenuActiveText: #f4f4f5; // https://github.com/ElemeFE/element/issues/12951
|
||||||
|
|
||||||
$menuBg: #304156;
|
$menuBg: #304156;
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
const TokenKey = 'zb-token'
|
const TokenKey = 'zb-token'
|
||||||
|
|
||||||
export function getToken() {
|
export function getToken() {
|
||||||
@@ -6,9 +5,9 @@ export function getToken() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function setToken(token) {
|
export function setToken(token) {
|
||||||
return localStorage.TokenKey = token
|
return (localStorage.TokenKey = token)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function removeToken() {
|
export function removeToken() {
|
||||||
return localStorage.TokenKey =''
|
return (localStorage.TokenKey = '')
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ export async function downloadFiles2ZipWithFolder(params: IDownloadFiles2ZipWith
|
|||||||
|
|
||||||
async function handleFolder(zip: JsZip, folder: IFolder) {
|
async function handleFolder(zip: JsZip, folder: IFolder) {
|
||||||
console.log({folder})
|
console.log({folder})
|
||||||
let folderPromises: Promise<any>[] = [];
|
const folderPromises: Promise<any>[] = [];
|
||||||
const promises = folder?.files?.map(async param => await handleEachFile(param, zip, folder.folderName));
|
const promises = folder?.files?.map(async param => await handleEachFile(param, zip, folder.folderName));
|
||||||
await Promise.all([...promises, ...folderPromises]);
|
await Promise.all([...promises, ...folderPromises]);
|
||||||
}
|
}
|
||||||
@@ -169,7 +169,7 @@ function handleDataWithRender(worksheet: Worksheet, sheet: ISheet) {
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
function getValueFromRender(renderResult: any) {
|
function getValueFromRender(renderResult: any) {
|
||||||
if (renderResult?.type) {
|
if (renderResult?.type) {
|
||||||
let children = renderResult?.props?.children;
|
const children = renderResult?.props?.children;
|
||||||
if (children?.type) {
|
if (children?.type) {
|
||||||
return getValueFromRender(children);
|
return getValueFromRender(children);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,12 +1,35 @@
|
|||||||
export default {
|
export default {
|
||||||
imgs: ['爱你',
|
imgs: [
|
||||||
'爱情', '爱心', '傲慢',
|
'爱你',
|
||||||
'白眼', '抱拳', '鄙视',
|
'爱情',
|
||||||
'闭嘴', '便便', '擦汗',
|
'爱心',
|
||||||
'菜刀', '差劲', '呲牙',
|
'傲慢',
|
||||||
'大哭', '蛋糕', '刀',
|
'白眼',
|
||||||
'得意', '凋谢', '发呆', 'NO', 'OK',
|
'抱拳',
|
||||||
'发抖', '发怒', '饭', '飞吻', '奋斗',
|
'鄙视',
|
||||||
'疯了', '尴尬', '勾引', '鼓掌', '哈欠',
|
'闭嘴',
|
||||||
]
|
'便便',
|
||||||
|
'擦汗',
|
||||||
|
'菜刀',
|
||||||
|
'差劲',
|
||||||
|
'呲牙',
|
||||||
|
'大哭',
|
||||||
|
'蛋糕',
|
||||||
|
'刀',
|
||||||
|
'得意',
|
||||||
|
'凋谢',
|
||||||
|
'发呆',
|
||||||
|
'NO',
|
||||||
|
'OK',
|
||||||
|
'发抖',
|
||||||
|
'发怒',
|
||||||
|
'饭',
|
||||||
|
'飞吻',
|
||||||
|
'奋斗',
|
||||||
|
'疯了',
|
||||||
|
'尴尬',
|
||||||
|
'勾引',
|
||||||
|
'鼓掌',
|
||||||
|
'哈欠',
|
||||||
|
],
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,15 +21,15 @@ export const exportExcel = async ({column,data,filename,autoWidth,format})=>{
|
|||||||
// 创建工作表
|
// 创建工作表
|
||||||
const worksheet = workbook.addWorksheet(filename);
|
const worksheet = workbook.addWorksheet(filename);
|
||||||
// 设置列名
|
// 设置列名
|
||||||
let columnsName = [];
|
const columnsName = [];
|
||||||
column.forEach((item,index)=>{
|
column.forEach((item,index)=>{
|
||||||
let obj = {
|
const obj = {
|
||||||
header: item.label, key:item.name, width: null
|
header: item.label, key:item.name, width: null
|
||||||
}
|
}
|
||||||
if(autoWidth){
|
if(autoWidth){
|
||||||
let maxArr = [autoWidthAction(item.label)]
|
const maxArr = [autoWidthAction(item.label)]
|
||||||
data.forEach(ite=>{
|
data.forEach(ite=>{
|
||||||
let str = ite[item.name] ||''
|
const str = ite[item.name] ||''
|
||||||
if(str){
|
if(str){
|
||||||
maxArr.push(autoWidthAction(str))
|
maxArr.push(autoWidthAction(str))
|
||||||
}
|
}
|
||||||
@@ -93,15 +93,15 @@ export const exportStyleExcel =async ({column,data,filename,autoWidth,format})=>
|
|||||||
// 创建工作表
|
// 创建工作表
|
||||||
const worksheet = workbook.addWorksheet(filename);
|
const worksheet = workbook.addWorksheet(filename);
|
||||||
// 设置列名
|
// 设置列名
|
||||||
let columnsName = [];
|
const columnsName = [];
|
||||||
column.forEach((item,index)=>{
|
column.forEach((item,index)=>{
|
||||||
let obj = {
|
const obj = {
|
||||||
header: item.label, key:item.name, width: null
|
header: item.label, key:item.name, width: null
|
||||||
}
|
}
|
||||||
if(autoWidth){
|
if(autoWidth){
|
||||||
let maxArr = [autoWidthAction(item.label)]
|
const maxArr = [autoWidthAction(item.label)]
|
||||||
data.forEach(ite=>{
|
data.forEach(ite=>{
|
||||||
let str = ite[item.name] ||''
|
const str = ite[item.name] ||''
|
||||||
if(str){
|
if(str){
|
||||||
maxArr.push(autoWidthAction(str))
|
maxArr.push(autoWidthAction(str))
|
||||||
}
|
}
|
||||||
@@ -161,7 +161,7 @@ export const exportMultiHeaderExcel = ({column,data,filename,autoWidth})=>{
|
|||||||
// 创建excel
|
// 创建excel
|
||||||
const workbook = new ExcelJS.Workbook();
|
const workbook = new ExcelJS.Workbook();
|
||||||
// 创建工作表
|
// 创建工作表
|
||||||
let sheet = workbook.addWorksheet("sheet1");
|
const sheet = workbook.addWorksheet("sheet1");
|
||||||
|
|
||||||
// 添加表头
|
// 添加表头
|
||||||
sheet.getRow(1).values = ["序号", "日期","地址" ,"配送消息" ,,, ];
|
sheet.getRow(1).values = ["序号", "日期","地址" ,"配送消息" ,,, ];
|
||||||
@@ -173,16 +173,16 @@ export const exportMultiHeaderExcel = ({column,data,filename,autoWidth})=>{
|
|||||||
"城市",
|
"城市",
|
||||||
"邮编"
|
"邮编"
|
||||||
];
|
];
|
||||||
let headers = [];
|
const headers = [];
|
||||||
column.forEach((item,index)=>{
|
column.forEach((item,index)=>{
|
||||||
if(item.children){
|
if(item.children){
|
||||||
item.children.forEach(itemChild=>{
|
item.children.forEach(itemChild=>{
|
||||||
let obj = {
|
const obj = {
|
||||||
key:itemChild.name, width: null
|
key:itemChild.name, width: null
|
||||||
}
|
}
|
||||||
let maxArr = [autoWidthAction(itemChild.label)]
|
const maxArr = [autoWidthAction(itemChild.label)]
|
||||||
data.forEach(ite=>{
|
data.forEach(ite=>{
|
||||||
let str = ite[itemChild.name] ||''
|
const str = ite[itemChild.name] ||''
|
||||||
if(str){
|
if(str){
|
||||||
maxArr.push(autoWidthAction(str))
|
maxArr.push(autoWidthAction(str))
|
||||||
}
|
}
|
||||||
@@ -193,12 +193,12 @@ export const exportMultiHeaderExcel = ({column,data,filename,autoWidth})=>{
|
|||||||
})
|
})
|
||||||
|
|
||||||
}else {
|
}else {
|
||||||
let obj = {
|
const obj = {
|
||||||
key:item.name, width: null
|
key:item.name, width: null
|
||||||
}
|
}
|
||||||
let maxArr = [autoWidthAction(item.label)]
|
const maxArr = [autoWidthAction(item.label)]
|
||||||
data.forEach(ite=>{
|
data.forEach(ite=>{
|
||||||
let str = ite[item.name] ||''
|
const str = ite[item.name] ||''
|
||||||
if(str){
|
if(str){
|
||||||
maxArr.push(autoWidthAction(str))
|
maxArr.push(autoWidthAction(str))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ export function parseTime(time, cFormat) {
|
|||||||
if (typeof time === 'object') {
|
if (typeof time === 'object') {
|
||||||
date = time
|
date = time
|
||||||
} else {
|
} else {
|
||||||
if ((typeof time === 'string')) {
|
if (typeof time === 'string') {
|
||||||
if ((/^[0-9]+$/.test(time))) {
|
if (/^[0-9]+$/.test(time)) {
|
||||||
// support "1548221490638"
|
// support "1548221490638"
|
||||||
time = parseInt(time)
|
time = parseInt(time)
|
||||||
} else {
|
} else {
|
||||||
@@ -28,7 +28,7 @@ export function parseTime(time, cFormat) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((typeof time === 'number') && (time.toString().length === 10)) {
|
if (typeof time === 'number' && time.toString().length === 10) {
|
||||||
time = time * 1000
|
time = time * 1000
|
||||||
}
|
}
|
||||||
date = new Date(time)
|
date = new Date(time)
|
||||||
@@ -40,12 +40,14 @@ export function parseTime(time, cFormat) {
|
|||||||
h: date.getHours(),
|
h: date.getHours(),
|
||||||
i: date.getMinutes(),
|
i: date.getMinutes(),
|
||||||
s: date.getSeconds(),
|
s: date.getSeconds(),
|
||||||
a: date.getDay()
|
a: date.getDay(),
|
||||||
}
|
}
|
||||||
const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
|
const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
|
||||||
const value = formatObj[key]
|
const value = formatObj[key]
|
||||||
// Note: getDay() returns 0 on Sunday
|
// Note: getDay() returns 0 on Sunday
|
||||||
if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value ] }
|
if (key === 'a') {
|
||||||
|
return ['日', '一', '二', '三', '四', '五', '六'][value]
|
||||||
|
}
|
||||||
return value.toString().padStart(2, '0')
|
return value.toString().padStart(2, '0')
|
||||||
})
|
})
|
||||||
return time_str
|
return time_str
|
||||||
@@ -81,15 +83,7 @@ export function formatTime(time, option) {
|
|||||||
return parseTime(time, option)
|
return parseTime(time, option)
|
||||||
} else {
|
} else {
|
||||||
return (
|
return (
|
||||||
d.getMonth() +
|
d.getMonth() + 1 + '月' + d.getDate() + '日' + d.getHours() + '时' + d.getMinutes() + '分'
|
||||||
1 +
|
|
||||||
'月' +
|
|
||||||
d.getDate() +
|
|
||||||
'日' +
|
|
||||||
d.getHours() +
|
|
||||||
'时' +
|
|
||||||
d.getMinutes() +
|
|
||||||
'分'
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -124,7 +118,7 @@ export function byteLength(str) {
|
|||||||
const code = str.charCodeAt(i)
|
const code = str.charCodeAt(i)
|
||||||
if (code > 0x7f && code <= 0x7ff) s++
|
if (code > 0x7f && code <= 0x7ff) s++
|
||||||
else if (code > 0x7ff && code <= 0xffff) s += 2
|
else if (code > 0x7ff && code <= 0xffff) s += 2
|
||||||
if (code >= 0xDC00 && code <= 0xDFFF) i--
|
if (code >= 0xdc00 && code <= 0xdfff) i--
|
||||||
}
|
}
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
@@ -150,10 +144,10 @@ export function cleanArray(actual) {
|
|||||||
export function param(json) {
|
export function param(json) {
|
||||||
if (!json) return ''
|
if (!json) return ''
|
||||||
return cleanArray(
|
return cleanArray(
|
||||||
Object.keys(json).map(key => {
|
Object.keys(json).map((key) => {
|
||||||
if (json[key] === undefined) return ''
|
if (json[key] === undefined) return ''
|
||||||
return encodeURIComponent(key) + '=' + encodeURIComponent(json[key])
|
return encodeURIComponent(key) + '=' + encodeURIComponent(json[key])
|
||||||
})
|
}),
|
||||||
).join('&')
|
).join('&')
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,7 +162,7 @@ export function param2Obj(url) {
|
|||||||
}
|
}
|
||||||
const obj = {}
|
const obj = {}
|
||||||
const searchArr = search.split('&')
|
const searchArr = search.split('&')
|
||||||
searchArr.forEach(v => {
|
searchArr.forEach((v) => {
|
||||||
const index = v.indexOf('=')
|
const index = v.indexOf('=')
|
||||||
if (index !== -1) {
|
if (index !== -1) {
|
||||||
const name = v.substring(0, index)
|
const name = v.substring(0, index)
|
||||||
@@ -202,7 +196,7 @@ export function objectMerge(target, source) {
|
|||||||
if (Array.isArray(source)) {
|
if (Array.isArray(source)) {
|
||||||
return source.slice()
|
return source.slice()
|
||||||
}
|
}
|
||||||
Object.keys(source).forEach(property => {
|
Object.keys(source).forEach((property) => {
|
||||||
const sourceProperty = source[property]
|
const sourceProperty = source[property]
|
||||||
if (typeof sourceProperty === 'object') {
|
if (typeof sourceProperty === 'object') {
|
||||||
target[property] = objectMerge(target[property], sourceProperty)
|
target[property] = objectMerge(target[property], sourceProperty)
|
||||||
@@ -227,8 +221,7 @@ export function toggleClass(element, className) {
|
|||||||
classString += '' + className
|
classString += '' + className
|
||||||
} else {
|
} else {
|
||||||
classString =
|
classString =
|
||||||
classString.substr(0, nameIndex) +
|
classString.substr(0, nameIndex) + classString.substr(nameIndex + className.length)
|
||||||
classString.substr(nameIndex + className.length)
|
|
||||||
}
|
}
|
||||||
element.className = classString
|
element.className = classString
|
||||||
}
|
}
|
||||||
@@ -298,7 +291,7 @@ export function deepClone(source) {
|
|||||||
throw new Error('error arguments', 'deepClone')
|
throw new Error('error arguments', 'deepClone')
|
||||||
}
|
}
|
||||||
const targetObj = source.constructor === Array ? [] : {}
|
const targetObj = source.constructor === Array ? [] : {}
|
||||||
Object.keys(source).forEach(keys => {
|
Object.keys(source).forEach((keys) => {
|
||||||
if (source[keys] && typeof source[keys] === 'object') {
|
if (source[keys] && typeof source[keys] === 'object') {
|
||||||
targetObj[keys] = deepClone(source[keys])
|
targetObj[keys] = deepClone(source[keys])
|
||||||
} else {
|
} else {
|
||||||
@@ -356,70 +349,77 @@ export function removeClass(ele, cls) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export function getColor() {
|
export function getColor() {
|
||||||
var str = '#';
|
var str = '#'
|
||||||
var arr = ['1', '2', '3', '4', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
|
var arr = ['1', '2', '3', '4', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
|
||||||
for (var i = 0; i < 6; i++) {
|
for (var i = 0; i < 6; i++) {
|
||||||
var num = parseInt(Math.random() * 16);
|
var num = parseInt(Math.random() * 16)
|
||||||
str += arr[num];
|
str += arr[num]
|
||||||
}
|
}
|
||||||
return str;
|
return str
|
||||||
}
|
}
|
||||||
// 检查给定的值是否是数组
|
// 检查给定的值是否是数组
|
||||||
export const isArray = function (value) {
|
export const isArray = function (value) {
|
||||||
return objToString.call(value) === "[object Array]";
|
return objToString.call(value) === '[object Array]'
|
||||||
};
|
}
|
||||||
var funProto = Function.prototype;
|
var funProto = Function.prototype
|
||||||
var objProto = Object.prototype;
|
var objProto = Object.prototype
|
||||||
|
|
||||||
var getPrototypeOf = Object.getPrototypeOf;
|
var getPrototypeOf = Object.getPrototypeOf
|
||||||
|
|
||||||
var objToString = objProto.toString;
|
var objToString = objProto.toString
|
||||||
var hasOwnProperty = objProto.hasOwnProperty;
|
var hasOwnProperty = objProto.hasOwnProperty
|
||||||
var funToString = funProto.toString;
|
var funToString = funProto.toString
|
||||||
// 检查给定的值是否是字符串
|
// 检查给定的值是否是字符串
|
||||||
export const isString = function (value) {
|
export const isString = function (value) {
|
||||||
return objToString.call(value) === "[object String]";
|
return objToString.call(value) === '[object String]'
|
||||||
};
|
}
|
||||||
// 检查给定的值是否是纯对象,纯对象是指通过 {} 或 new Object() 声明的对象
|
// 检查给定的值是否是纯对象,纯对象是指通过 {} 或 new Object() 声明的对象
|
||||||
export const isPlainObject = function (value) {
|
export const isPlainObject = function (value) {
|
||||||
if (!value || objToString.call(value) !== "[object Object]") {
|
if (!value || objToString.call(value) !== '[object Object]') {
|
||||||
return false;
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
var prototype = getPrototypeOf(value);
|
var prototype = getPrototypeOf(value)
|
||||||
|
|
||||||
if (prototype === null) {
|
if (prototype === null) {
|
||||||
return true;
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
var constructor = hasOwnProperty.call(prototype, "constructor") && prototype.constructor;
|
var constructor = hasOwnProperty.call(prototype, 'constructor') && prototype.constructor
|
||||||
|
|
||||||
return typeof constructor === "function" && funToString.call(constructor) === funToString.call(Object);
|
return (
|
||||||
};
|
typeof constructor === 'function' && funToString.call(constructor) === funToString.call(Object)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// // 深度克隆 array 数组或 json 对象,返回克隆后的副本
|
// // 深度克隆 array 数组或 json 对象,返回克隆后的副本
|
||||||
export const deepObjClone = function (obj) {
|
export const deepObjClone = function (obj) {
|
||||||
let weakMap = new WeakMap()
|
let weakMap = new WeakMap()
|
||||||
function clone(obj) {
|
function clone(obj) {
|
||||||
if(obj==null){return obj}
|
if (obj == null) {
|
||||||
if(obj instanceof Date){ return new Date(obj) }
|
return obj
|
||||||
if(obj instanceof RegExp){ return new RegExp(obj)}
|
}
|
||||||
|
if (obj instanceof Date) {
|
||||||
|
return new Date(obj)
|
||||||
|
}
|
||||||
|
if (obj instanceof RegExp) {
|
||||||
|
return new RegExp(obj)
|
||||||
|
}
|
||||||
if (typeof obj !== 'object') return obj
|
if (typeof obj !== 'object') return obj
|
||||||
|
|
||||||
if (weakMap.get(obj)) {
|
if (weakMap.get(obj)) {
|
||||||
return weakMap.get(obj)
|
return weakMap.get(obj)
|
||||||
}
|
}
|
||||||
var copy = new obj.constructor
|
var copy = new obj.constructor()
|
||||||
weakMap.set(obj, copy)
|
weakMap.set(obj, copy)
|
||||||
for (var key in obj) {
|
for (var key in obj) {
|
||||||
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
||||||
var value = obj[key];
|
var value = obj[key]
|
||||||
copy[key] = clone(value);
|
copy[key] = clone(value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return copy;
|
return copy
|
||||||
}
|
}
|
||||||
return clone(obj)
|
return clone(obj)
|
||||||
};
|
}
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ export function validUsername(str) {
|
|||||||
* @returns {Boolean}
|
* @returns {Boolean}
|
||||||
*/
|
*/
|
||||||
export function validURL(url) {
|
export function validURL(url) {
|
||||||
const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
|
const reg =
|
||||||
|
/^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
|
||||||
return reg.test(url)
|
return reg.test(url)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,7 +61,8 @@ export function validAlphabets(str) {
|
|||||||
* @returns {Boolean}
|
* @returns {Boolean}
|
||||||
*/
|
*/
|
||||||
export function validEmail(email) {
|
export function validEmail(email) {
|
||||||
const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
|
const reg =
|
||||||
|
/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
|
||||||
return reg.test(email)
|
return reg.test(email)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="home">
|
<div class="home">
|
||||||
<img alt="Vue logo" src="../assets/logo.png">
|
<img alt="Vue logo" src="../assets/logo.png" />
|
||||||
<HelloWorld msg="Welcome to Your Vue.js + TypeScript App" />
|
<HelloWorld msg="Welcome to Your Vue.js + TypeScript App" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent } from 'vue';
|
import { defineComponent } from 'vue'
|
||||||
import HelloWorld from '@/components/HelloWorld.vue'; // @ is an alias to /src
|
import HelloWorld from '@/components/HelloWorld.vue' // @ is an alias to /src
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'Home',
|
name: 'Home',
|
||||||
components: {
|
components: {
|
||||||
HelloWorld,
|
HelloWorld,
|
||||||
},
|
},
|
||||||
});
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -8,7 +8,9 @@
|
|||||||
<div class="item-right">
|
<div class="item-right">
|
||||||
<div class="item-right-inner">
|
<div class="item-right-inner">
|
||||||
<div class="text-title">带动就业人数</div>
|
<div class="text-title">带动就业人数</div>
|
||||||
<div class="text-number"><count-to :startVal="0" :endVal="6285" :duration="4000" separator=""></count-to></div>
|
<div class="text-number"
|
||||||
|
><count-to :startVal="0" :endVal="6285" :duration="4000" separator=""></count-to
|
||||||
|
></div>
|
||||||
<div class="text-der text-decenter-wrapr">
|
<div class="text-der text-decenter-wrapr">
|
||||||
<span class="left">同比去年</span>
|
<span class="left">同比去年</span>
|
||||||
<img src="@/assets/image/allow.png" />
|
<img src="@/assets/image/allow.png" />
|
||||||
@@ -19,10 +21,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="circle-dot" v-for="item,index in pointStyle" :key="index" :style="{
|
<div
|
||||||
|
class="circle-dot"
|
||||||
|
v-for="(item, index) in pointStyle"
|
||||||
|
:key="index"
|
||||||
|
:style="{
|
||||||
left: `${item.left}px`,
|
left: `${item.left}px`,
|
||||||
top:`${item.top}px`
|
top: `${item.top}px`,
|
||||||
}"></div>
|
}"
|
||||||
|
></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -47,11 +54,15 @@ const getAttribute = () => {
|
|||||||
const mAnimationInfo = mAnimation.value.getBoundingClientRect()
|
const mAnimationInfo = mAnimation.value.getBoundingClientRect()
|
||||||
const obj = []
|
const obj = []
|
||||||
for (let i = 0; i < 30; i++) {
|
for (let i = 0; i < 30; i++) {
|
||||||
if (!obj[i]) { obj[i] = {} }
|
if (!obj[i]) {
|
||||||
|
obj[i] = {}
|
||||||
|
}
|
||||||
obj[i].left = randomNum(0, mAnimationInfo.width)
|
obj[i].left = randomNum(0, mAnimationInfo.width)
|
||||||
}
|
}
|
||||||
for (let i = 0; i < 30; i++) {
|
for (let i = 0; i < 30; i++) {
|
||||||
if (!obj[i]) { obj[i] = {} }
|
if (!obj[i]) {
|
||||||
|
obj[i] = {}
|
||||||
|
}
|
||||||
obj[i].top = randomNum(0, mAnimationInfo.height)
|
obj[i].top = randomNum(0, mAnimationInfo.height)
|
||||||
}
|
}
|
||||||
return obj
|
return obj
|
||||||
@@ -75,11 +86,14 @@ onMounted(() => {
|
|||||||
animation: rotate 5s infinite linear;
|
animation: rotate 5s infinite linear;
|
||||||
}
|
}
|
||||||
@keyframes rotate {
|
@keyframes rotate {
|
||||||
0%{transform:rotate(0deg);}
|
0% {
|
||||||
100%{transform:rotate(360deg);}
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.item {
|
.item {
|
||||||
|
|
||||||
display: flex;
|
display: flex;
|
||||||
/*align-items: center;*/
|
/*align-items: center;*/
|
||||||
.item-icon {
|
.item-icon {
|
||||||
@@ -87,7 +101,7 @@ onMounted(() => {
|
|||||||
height: 109px;
|
height: 109px;
|
||||||
}
|
}
|
||||||
.item-icon1 {
|
.item-icon1 {
|
||||||
background: url("../../assets/image/center-inner1.png") no-repeat center 43%;
|
background: url('../../assets/image/center-inner1.png') no-repeat center 43%;
|
||||||
}
|
}
|
||||||
.item-right {
|
.item-right {
|
||||||
margin-left: 20px;
|
margin-left: 20px;
|
||||||
@@ -127,14 +141,11 @@ onMounted(() => {
|
|||||||
}
|
}
|
||||||
.right {
|
.right {
|
||||||
color: #ff0000;
|
color: #ff0000;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.circle-dot {
|
.circle-dot {
|
||||||
width: 5px;
|
width: 5px;
|
||||||
height: 5px;
|
height: 5px;
|
||||||
@@ -190,7 +201,6 @@ onMounted(() => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.item-animation {
|
.item-animation {
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,6 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import LineCharts from './components/complex/line/index.vue'
|
import LineCharts from './components/complex/line/index.vue'
|
||||||
import BarCharts from './components/complex/bar/index.vue'
|
import BarCharts from './components/complex/bar/index.vue'
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.m-complex {
|
.m-complex {
|
||||||
@@ -35,5 +34,4 @@ import BarCharts from './components/complex/bar/index.vue'
|
|||||||
background-size: contain;
|
background-size: contain;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -3,31 +3,31 @@
|
|||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import 'echarts-liquidfill/src/liquidFill.js'
|
import 'echarts-liquidfill/src/liquidFill.js'
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const options = {
|
const options = {
|
||||||
legend: {
|
legend: {
|
||||||
@@ -38,12 +38,12 @@ const options = {
|
|||||||
'60岁全程接种量',
|
'60岁全程接种量',
|
||||||
'80岁任务数',
|
'80岁任务数',
|
||||||
'80岁全程接种量',
|
'80岁全程接种量',
|
||||||
'完成率'
|
'完成率',
|
||||||
]
|
],
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: ['街道1', '街道2', '街道3', '街道4', '街道5', '街道6', '街道7']
|
data: ['街道1', '街道2', '街道3', '街道4', '街道5', '街道6', '街道7'],
|
||||||
},
|
},
|
||||||
yAxis: [
|
yAxis: [
|
||||||
{ type: 'value' },
|
{ type: 'value' },
|
||||||
@@ -54,7 +54,7 @@ const options = {
|
|||||||
// max: 100,
|
// max: 100,
|
||||||
nameTextStyle: {
|
nameTextStyle: {
|
||||||
color: '#ccc',
|
color: '#ccc',
|
||||||
padding: [0, 0, 10, -30]
|
padding: [0, 0, 10, -30],
|
||||||
},
|
},
|
||||||
splitNumber: 5,
|
splitNumber: 5,
|
||||||
splitLine: {
|
splitLine: {
|
||||||
@@ -63,16 +63,16 @@ const options = {
|
|||||||
type: 'dashed',
|
type: 'dashed',
|
||||||
width: 1,
|
width: 1,
|
||||||
// 使用深浅的间隔色
|
// 使用深浅的间隔色
|
||||||
color: ['#566471', '#566471']
|
color: ['#566471', '#566471'],
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
axisLabel: {
|
axisLabel: {
|
||||||
show: true,
|
show: true,
|
||||||
textStyle: {
|
textStyle: {
|
||||||
fontSize: 12
|
fontSize: 12,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
// tooltip: {
|
// tooltip: {
|
||||||
// trigger: 'axis',
|
// trigger: 'axis',
|
||||||
@@ -81,56 +81,60 @@ const options = {
|
|||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
axisPointer: {
|
axisPointer: {
|
||||||
type: 'shadow'
|
type: 'shadow',
|
||||||
},
|
},
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#fff',
|
color: '#fff',
|
||||||
align: 'left',
|
align: 'left',
|
||||||
fontSize: 14
|
fontSize: 14,
|
||||||
},
|
},
|
||||||
axisLine: {//x坐标轴轴线
|
axisLine: {
|
||||||
|
//x坐标轴轴线
|
||||||
show: true,
|
show: true,
|
||||||
lineStyle: {//x坐标轴轴线样式
|
lineStyle: {
|
||||||
|
//x坐标轴轴线样式
|
||||||
color: '#000', //'#ccc' | 'rgb(128, 128, 128)' | 'rgba(128, 128, 128, 0.5)',设置标签颜色
|
color: '#000', //'#ccc' | 'rgb(128, 128, 128)' | 'rgba(128, 128, 128, 0.5)',设置标签颜色
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
backgroundColor: 'rgba(0,0,0,0.8)',
|
backgroundColor: 'rgba(0,0,0,0.8)',
|
||||||
formatter: function (params) {
|
formatter: function (params) {
|
||||||
console.log(params);
|
console.log(params)
|
||||||
let str = params[0].name + '<br />';
|
let str = params[0].name + '<br />'
|
||||||
console.log(str);
|
console.log(str)
|
||||||
params.forEach((item) => {
|
params.forEach((item) => {
|
||||||
console.log(item.seriesName);
|
console.log(item.seriesName)
|
||||||
if (item.value) {
|
if (item.value) {
|
||||||
if (item.seriesName.indexOf('岁全程接种量') != -1) {
|
if (item.seriesName.indexOf('岁全程接种量') != -1) {
|
||||||
str += `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color: ${item.color}
|
str += `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color: ${
|
||||||
|
item.color
|
||||||
|
}
|
||||||
"></span>
|
"></span>
|
||||||
${item.seriesName}
|
${item.seriesName}
|
||||||
:
|
:
|
||||||
${item.value}人 <br/>
|
${item.value}人 <br/>
|
||||||
全程完成率
|
全程完成率
|
||||||
: ${item.value / 100}%
|
: ${item.value / 100}%
|
||||||
<br/><br/>`;
|
<br/><br/>`
|
||||||
} else if (item.seriesName.indexOf('岁任务数') != -1) {
|
} else if (item.seriesName.indexOf('岁任务数') != -1) {
|
||||||
str += `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color: ${item.color}
|
str += `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color: ${item.color}
|
||||||
"></span>
|
"></span>
|
||||||
${item.seriesName}
|
${item.seriesName}
|
||||||
:
|
:
|
||||||
${item.value}人
|
${item.value}人
|
||||||
<br/>`;
|
<br/>`
|
||||||
} else {
|
} else {
|
||||||
str += `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color: ${item.color}
|
str += `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color: ${item.color}
|
||||||
"></span>
|
"></span>
|
||||||
${item.seriesName}
|
${item.seriesName}
|
||||||
:
|
:
|
||||||
${item.value}%
|
${item.value}%
|
||||||
<br/>`;
|
<br/>`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
return str;
|
return str
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
series: [
|
series: [
|
||||||
@@ -138,37 +142,37 @@ const options = {
|
|||||||
name: '3-11岁任务数',
|
name: '3-11岁任务数',
|
||||||
data: [150, 230, 224, 218, 135, 147, 260],
|
data: [150, 230, 224, 218, 135, 147, 260],
|
||||||
stack: 'BB',
|
stack: 'BB',
|
||||||
type: 'bar'
|
type: 'bar',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '3-11岁全程接种量',
|
name: '3-11岁全程接种量',
|
||||||
data: [150, 230, 224, 218, 135, 147, 260],
|
data: [150, 230, 224, 218, 135, 147, 260],
|
||||||
stack: 'BB',
|
stack: 'BB',
|
||||||
type: 'bar'
|
type: 'bar',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '60岁任务数',
|
name: '60岁任务数',
|
||||||
data: [150, 230, 224, 218, 135, 147, 260],
|
data: [150, 230, 224, 218, 135, 147, 260],
|
||||||
stack: 'AA',
|
stack: 'AA',
|
||||||
type: 'bar'
|
type: 'bar',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '60岁全程接种量',
|
name: '60岁全程接种量',
|
||||||
data: [880, 30, 124, 118, 35, 47, 160],
|
data: [880, 30, 124, 118, 35, 47, 160],
|
||||||
stack: 'AA',
|
stack: 'AA',
|
||||||
type: 'bar'
|
type: 'bar',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '80岁任务数',
|
name: '80岁任务数',
|
||||||
data: [660, 30, 124, 118, 35, 47, 160],
|
data: [660, 30, 124, 118, 35, 47, 160],
|
||||||
stack: 'Ad',
|
stack: 'Ad',
|
||||||
type: 'bar'
|
type: 'bar',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '80岁全程接种量',
|
name: '80岁全程接种量',
|
||||||
data: [880, 30, 124, 118, 35, 47, 160],
|
data: [880, 30, 124, 118, 35, 47, 160],
|
||||||
stack: 'Ad',
|
stack: 'Ad',
|
||||||
type: 'bar'
|
type: 'bar',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '完成率',
|
name: '完成率',
|
||||||
@@ -180,25 +184,25 @@ const options = {
|
|||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
type: 'dotted'
|
type: 'dotted',
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
data: [{ type: 'average', name: 'Avg' + '%' }]
|
},
|
||||||
|
},
|
||||||
|
data: [{ type: 'average', name: 'Avg' + '%' }],
|
||||||
},
|
},
|
||||||
// symbol: 'none',
|
// symbol: 'none',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
width: 2,
|
width: 2,
|
||||||
type: 'solid' //'dotted'虚线 'solid'实线
|
type: 'solid', //'dotted'虚线 'solid'实线
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
}
|
let chart: EChartsType
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
};
|
|
||||||
let chart:EChartsType;
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -209,6 +213,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -10,32 +10,32 @@ const chartsRef = ref<HTMLElement|null>()
|
|||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
xAxisData: {
|
xAxisData: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
|
default: () => ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => {}
|
default: () => {},
|
||||||
},
|
},
|
||||||
seriesData: {
|
seriesData: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => [150, 230, 224, 218, 135, 147, 260]
|
default: () => [150, 230, 224, 218, 135, 147, 260],
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const options = {
|
const options = {
|
||||||
grid: {
|
grid: {
|
||||||
@@ -47,18 +47,18 @@ const options = {
|
|||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: props.xAxisData
|
data: props.xAxisData,
|
||||||
},
|
},
|
||||||
yAxis: {
|
yAxis: {
|
||||||
type: 'value'
|
type: 'value',
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
data: props.seriesData,
|
data: props.seriesData,
|
||||||
type: 'bar'
|
type: 'bar',
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
...props.config
|
...props.config,
|
||||||
}
|
}
|
||||||
let chart: EChartsType
|
let chart: EChartsType
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
@@ -74,6 +74,4 @@ onMounted(() => {
|
|||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style></style>
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ data.forEach((item,index) => {
|
|||||||
let obj = {
|
let obj = {
|
||||||
value: data[index],
|
value: data[index],
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
color: color[index]
|
color: color[index],
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
dataOptions.push(obj)
|
dataOptions.push(obj)
|
||||||
})
|
})
|
||||||
@@ -27,7 +27,7 @@ const lineConfig = reactive({
|
|||||||
left: '3%',
|
left: '3%',
|
||||||
right: '4%',
|
right: '4%',
|
||||||
bottom: '10%',
|
bottom: '10%',
|
||||||
containLabel: true
|
containLabel: true,
|
||||||
},
|
},
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
@@ -41,44 +41,47 @@ const lineConfig = reactive({
|
|||||||
<div class="title" >完成占比${name[0].value}</div>
|
<div class="title" >完成占比${name[0].value}</div>
|
||||||
</div>`
|
</div>`
|
||||||
return tipHtml
|
return tipHtml
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
yAxis: {
|
yAxis: {
|
||||||
// 设置坐标轴的 文字样式
|
// 设置坐标轴的 文字样式
|
||||||
axisLabel: {
|
axisLabel: {
|
||||||
color: '#bbdaff',
|
color: '#bbdaff',
|
||||||
margin: 20 // 刻度标签与轴线之间的距离。
|
margin: 20, // 刻度标签与轴线之间的距离。
|
||||||
},
|
},
|
||||||
axisTick: { // 取消坐标轴刻度线
|
axisTick: {
|
||||||
show: false
|
// 取消坐标轴刻度线
|
||||||
|
show: false,
|
||||||
},
|
},
|
||||||
// 坐标轴轴线相关设置。
|
// 坐标轴轴线相关设置。
|
||||||
splitLine: {
|
splitLine: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#2d5baf'
|
color: '#2d5baf',
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
splitLine: {
|
splitLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
// 坐标轴轴线相关设置。
|
// 坐标轴轴线相关设置。
|
||||||
axisLine: {
|
axisLine: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#2d5baf'
|
color: '#2d5baf',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
|
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
|
||||||
axisLabel: { // 设置坐标轴的 文字样式
|
axisLabel: {
|
||||||
|
// 设置坐标轴的 文字样式
|
||||||
color: '#bbdaff',
|
color: '#bbdaff',
|
||||||
margin: 20 // 刻度标签与轴线之间的距离。
|
margin: 20, // 刻度标签与轴线之间的距离。
|
||||||
},
|
},
|
||||||
|
|
||||||
axisTick: { // 取消坐标轴刻度线
|
axisTick: {
|
||||||
show: false
|
// 取消坐标轴刻度线
|
||||||
}
|
show: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
@@ -86,13 +89,11 @@ const lineConfig = reactive({
|
|||||||
type: 'bar',
|
type: 'bar',
|
||||||
barMaxWidth: 18,
|
barMaxWidth: 18,
|
||||||
markLine: {
|
markLine: {
|
||||||
silent: true
|
silent: true,
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
}]
|
|
||||||
})
|
})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.item-charts {
|
.item-charts {
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -10,32 +10,32 @@ const chartsRef = ref<HTMLElement|null>()
|
|||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
xAxisData: {
|
xAxisData: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
|
default: () => ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => {}
|
default: () => {},
|
||||||
},
|
},
|
||||||
seriesData: {
|
seriesData: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => [150, 230, 224, 218, 135, 147, 260]
|
default: () => [150, 230, 224, 218, 135, 147, 260],
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const options = {
|
const options = {
|
||||||
grid: {
|
grid: {
|
||||||
@@ -47,18 +47,18 @@ const options = {
|
|||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: props.xAxisData
|
data: props.xAxisData,
|
||||||
},
|
},
|
||||||
yAxis: {
|
yAxis: {
|
||||||
type: 'value'
|
type: 'value',
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
data: props.seriesData,
|
data: props.seriesData,
|
||||||
type: 'line'
|
type: 'line',
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
...props.config
|
...props.config,
|
||||||
}
|
}
|
||||||
let chart: EChartsType
|
let chart: EChartsType
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
@@ -74,6 +74,4 @@ onMounted(() => {
|
|||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style></style>
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|||||||
@@ -10,32 +10,32 @@ const chartsRef = ref<HTMLElement|null>()
|
|||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
xAxisData: {
|
xAxisData: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
|
default: () => ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => {}
|
default: () => {},
|
||||||
},
|
},
|
||||||
seriesData: {
|
seriesData: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => [150, 230, 224, 218, 135, 147, 260]
|
default: () => [150, 230, 224, 218, 135, 147, 260],
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const options = {
|
const options = {
|
||||||
grid: {
|
grid: {
|
||||||
@@ -47,18 +47,18 @@ const options = {
|
|||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: props.xAxisData
|
data: props.xAxisData,
|
||||||
},
|
},
|
||||||
yAxis: {
|
yAxis: {
|
||||||
type: 'value'
|
type: 'value',
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
data: props.seriesData,
|
data: props.seriesData,
|
||||||
type: 'line'
|
type: 'line',
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
...props.config
|
...props.config,
|
||||||
}
|
}
|
||||||
let chart: EChartsType
|
let chart: EChartsType
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
@@ -74,6 +74,4 @@ onMounted(() => {
|
|||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style></style>
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ const lineConfig = reactive({
|
|||||||
left: '3%',
|
left: '3%',
|
||||||
right: '4%',
|
right: '4%',
|
||||||
bottom: '10%',
|
bottom: '10%',
|
||||||
containLabel: true
|
containLabel: true,
|
||||||
},
|
},
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
@@ -27,41 +27,43 @@ const lineConfig = reactive({
|
|||||||
<div class="title" >完成占比${name[0].data}</div>
|
<div class="title" >完成占比${name[0].data}</div>
|
||||||
</div>`
|
</div>`
|
||||||
return tipHtml
|
return tipHtml
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
yAxis: {
|
yAxis: {
|
||||||
// 设置坐标轴的 文字样式
|
// 设置坐标轴的 文字样式
|
||||||
axisLabel: {
|
axisLabel: {
|
||||||
color: '#bbdaff',
|
color: '#bbdaff',
|
||||||
margin: 20 // 刻度标签与轴线之间的距离。
|
margin: 20, // 刻度标签与轴线之间的距离。
|
||||||
},
|
},
|
||||||
// 坐标轴轴线相关设置。
|
// 坐标轴轴线相关设置。
|
||||||
splitLine: {
|
splitLine: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#2d5baf'
|
color: '#2d5baf',
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
splitLine: {
|
splitLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
// 坐标轴轴线相关设置。
|
// 坐标轴轴线相关设置。
|
||||||
axisLine: {
|
axisLine: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#2d5baf'
|
color: '#2d5baf',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
|
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
|
||||||
axisLabel: { // 设置坐标轴的 文字样式
|
axisLabel: {
|
||||||
|
// 设置坐标轴的 文字样式
|
||||||
color: '#bbdaff',
|
color: '#bbdaff',
|
||||||
margin: 20 // 刻度标签与轴线之间的距离。
|
margin: 20, // 刻度标签与轴线之间的距离。
|
||||||
},
|
},
|
||||||
boundaryGap: false, // 设置坐标轴两边的留白 ,从刻度原点开始,
|
boundaryGap: false, // 设置坐标轴两边的留白 ,从刻度原点开始,
|
||||||
axisTick: { // 取消坐标轴刻度线
|
axisTick: {
|
||||||
show: false
|
// 取消坐标轴刻度线
|
||||||
}
|
show: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
@@ -71,7 +73,7 @@ const lineConfig = reactive({
|
|||||||
symbolSize: 12, // 拐点圆的大小
|
symbolSize: 12, // 拐点圆的大小
|
||||||
symbol: 'circle',
|
symbol: 'circle',
|
||||||
markLine: {
|
markLine: {
|
||||||
silent: true
|
silent: true,
|
||||||
},
|
},
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
@@ -79,14 +81,13 @@ const lineConfig = reactive({
|
|||||||
lineStyle: {
|
lineStyle: {
|
||||||
width: 3,
|
width: 3,
|
||||||
color: '#920783',
|
color: '#920783',
|
||||||
type: 'solid' // 'dotted'虚线 'solid'实线
|
type: 'solid', // 'dotted'虚线 'solid'实线
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
|
},
|
||||||
}]
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.item-charts {
|
.item-charts {
|
||||||
|
|||||||
@@ -3,31 +3,31 @@
|
|||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import 'echarts-liquidfill/src/liquidFill.js'
|
import 'echarts-liquidfill/src/liquidFill.js'
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const options = {
|
const options = {
|
||||||
grid: {
|
grid: {
|
||||||
@@ -35,7 +35,7 @@ const options = {
|
|||||||
left: '2%',
|
left: '2%',
|
||||||
right: '2%',
|
right: '2%',
|
||||||
bottom: '2%',
|
bottom: '2%',
|
||||||
containLabel: true
|
containLabel: true,
|
||||||
},
|
},
|
||||||
backgroundColor: '#0F224C', //背景色
|
backgroundColor: '#0F224C', //背景色
|
||||||
series: [
|
series: [
|
||||||
@@ -44,7 +44,7 @@ const options = {
|
|||||||
radius: '80%', //显示比例
|
radius: '80%', //显示比例
|
||||||
center: ['50%', '50%'], //中心点
|
center: ['50%', '50%'], //中心点
|
||||||
amplitude: 20, //水波振幅
|
amplitude: 20, //水波振幅
|
||||||
data: [0.5,.5,.5], // data个数代表波浪数
|
data: [0.5, 0.5, 0.5], // data个数代表波浪数
|
||||||
color: [
|
color: [
|
||||||
{
|
{
|
||||||
type: 'linear',
|
type: 'linear',
|
||||||
@@ -89,8 +89,8 @@ const options = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
}
|
||||||
let chart:EChartsType;
|
let chart: EChartsType
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -101,6 +101,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -2,59 +2,59 @@
|
|||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const color = ['#3c90ff', '#fff225', '#24ffdf', '#ff9c3c', '#7536ff']
|
const color = ['#3c90ff', '#fff225', '#24ffdf', '#ff9c3c', '#7536ff']
|
||||||
const indicator = [
|
const indicator = [
|
||||||
{
|
{
|
||||||
text: '文明村',
|
text: '文明村',
|
||||||
min: 0,
|
min: 0,
|
||||||
max: 100
|
max: 100,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: '卫生村',
|
text: '卫生村',
|
||||||
min: 0,
|
min: 0,
|
||||||
max: 100
|
max: 100,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: '森林村庄',
|
text: '森林村庄',
|
||||||
min: 0,
|
min: 0,
|
||||||
max: 100
|
max: 100,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: '全面小康',
|
text: '全面小康',
|
||||||
min: 0,
|
min: 0,
|
||||||
max: 100
|
max: 100,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: '景区村庄',
|
text: '景区村庄',
|
||||||
min: 0,
|
min: 0,
|
||||||
max: 100
|
max: 100,
|
||||||
}
|
},
|
||||||
]
|
]
|
||||||
const Data = [80, 61, 70, 86, 77]
|
const Data = [80, 61, 70, 86, 77]
|
||||||
function setData() {
|
function setData() {
|
||||||
@@ -66,11 +66,11 @@ function setData() {
|
|||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#4BFFFC',
|
color: '#4BFFFC',
|
||||||
shadowColor: '#4BFFFC',
|
shadowColor: '#4BFFFC',
|
||||||
shadowBlur: 5
|
shadowBlur: 5,
|
||||||
},
|
},
|
||||||
shadowColor: '#4BFFFC',
|
shadowColor: '#4BFFFC',
|
||||||
shadowBlur: 5
|
shadowBlur: 5,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
areaStyle: {
|
areaStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
@@ -83,19 +83,19 @@ function setData() {
|
|||||||
colorStops: [
|
colorStops: [
|
||||||
{
|
{
|
||||||
offset: 1,
|
offset: 1,
|
||||||
color: '#4BFFFC'
|
color: '#4BFFFC',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
offset: 0,
|
offset: 0,
|
||||||
color: 'rgba(0,0,0,0)'
|
color: 'rgba(0,0,0,0)',
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
globalCoord: false
|
globalCoord: false,
|
||||||
|
},
|
||||||
|
opacity: 0.8, // 区域透明度
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
opacity: 0.8 // 区域透明度
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,23 +109,23 @@ function setgauge(i) {
|
|||||||
startAngle: 90 + 72 * i + 18, //开始刻度的角度
|
startAngle: 90 + 72 * i + 18, //开始刻度的角度
|
||||||
endAngle: 90 + 72 * (i + 1) - 18, //结束刻度的角度
|
endAngle: 90 + 72 * (i + 1) - 18, //结束刻度的角度
|
||||||
axisLine: {
|
axisLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: true,
|
show: true,
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#66ccff',
|
color: '#66ccff',
|
||||||
width: 1
|
width: 1,
|
||||||
},
|
},
|
||||||
length: 6,
|
length: 6,
|
||||||
splitNumber: 1
|
splitNumber: 1,
|
||||||
},
|
},
|
||||||
splitLine: {
|
splitLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
axisLabel: {
|
axisLabel: {
|
||||||
show: false
|
show: false,
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function setSpot() {
|
function setSpot() {
|
||||||
@@ -139,9 +139,9 @@ function setSpot() {
|
|||||||
borderColor: '#fff',
|
borderColor: '#fff',
|
||||||
borderWidth: 1,
|
borderWidth: 1,
|
||||||
shadowColor: color[i],
|
shadowColor: color[i],
|
||||||
shadowBlur: 8
|
shadowBlur: 8,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
return scatterData
|
return scatterData
|
||||||
@@ -151,7 +151,7 @@ const options = {
|
|||||||
backgroundColor: '#0E1327',
|
backgroundColor: '#0E1327',
|
||||||
polar: {
|
polar: {
|
||||||
center: ['50%', '50%'],
|
center: ['50%', '50%'],
|
||||||
radius: '60%'
|
radius: '60%',
|
||||||
},
|
},
|
||||||
radar: {
|
radar: {
|
||||||
shape: 'circle',
|
shape: 'circle',
|
||||||
@@ -161,7 +161,7 @@ const options = {
|
|||||||
axisName: {
|
axisName: {
|
||||||
color: '#b7e9fd',
|
color: '#b7e9fd',
|
||||||
fontSize: 13,
|
fontSize: 13,
|
||||||
padding: -20
|
padding: -20,
|
||||||
},
|
},
|
||||||
nameGap: 45,
|
nameGap: 45,
|
||||||
splitNumber: 4,
|
splitNumber: 4,
|
||||||
@@ -170,21 +170,21 @@ const options = {
|
|||||||
show: true,
|
show: true,
|
||||||
areaStyle: {
|
areaStyle: {
|
||||||
// 分隔区域的样式设置。
|
// 分隔区域的样式设置。
|
||||||
color: ['rgba(27, 50, 66, 0.4)']
|
color: ['rgba(27, 50, 66, 0.4)'],
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
axisLine: {
|
axisLine: {
|
||||||
//指向外圈文本的分隔线样式
|
//指向外圈文本的分隔线样式
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#5aa3d0'
|
color: '#5aa3d0',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
splitLine: {
|
splitLine: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: 'rgba(99,192,251,0.2)', // 分隔线颜色
|
color: 'rgba(99,192,251,0.2)', // 分隔线颜色
|
||||||
width: 2 // 分隔线线宽
|
width: 2, // 分隔线线宽
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
angleAxis: {
|
angleAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
@@ -193,40 +193,40 @@ const options = {
|
|||||||
boundaryGap: false,
|
boundaryGap: false,
|
||||||
clockwise: false,
|
clockwise: false,
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
axisLabel: {
|
axisLabel: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
axisLine: {
|
axisLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
splitLine: {
|
splitLine: {
|
||||||
show: false
|
show: false,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
radiusAxis: {
|
radiusAxis: {
|
||||||
min: 0,
|
min: 0,
|
||||||
max: 100,
|
max: 100,
|
||||||
interval: 25,
|
interval: 25,
|
||||||
splitLine: {
|
splitLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
axisLine: {
|
axisLine: {
|
||||||
//指向外圈文本的分隔线样式
|
//指向外圈文本的分隔线样式
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#5aa3d0'
|
color: '#5aa3d0',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
axisLabel: {
|
axisLabel: {
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
color: '#5aa3d0',
|
color: '#5aa3d0',
|
||||||
align: 'left',
|
align: 'left',
|
||||||
margin: -5
|
margin: -5,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
setgauge(0),
|
setgauge(0),
|
||||||
@@ -238,22 +238,22 @@ const options = {
|
|||||||
type: 'radar',
|
type: 'radar',
|
||||||
silent: true,
|
silent: true,
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#66ffff'
|
color: '#66ffff',
|
||||||
},
|
},
|
||||||
areaStyle: {
|
areaStyle: {
|
||||||
color: 'rgba(102, 255, 255, 0.31)'
|
color: 'rgba(102, 255, 255, 0.31)',
|
||||||
},
|
},
|
||||||
data: setData()
|
data: setData(),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'scatter',
|
type: 'scatter',
|
||||||
coordinateSystem: 'polar',
|
coordinateSystem: 'polar',
|
||||||
symbolSize: 20,
|
symbolSize: 20,
|
||||||
data: setSpot()
|
data: setSpot(),
|
||||||
|
},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
]
|
let chart: EChartsType
|
||||||
};
|
|
||||||
let chart:EChartsType;
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -262,10 +262,8 @@ const initChart =()=> {
|
|||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
chart = initChart()
|
chart = initChart()
|
||||||
|
|
||||||
|
|
||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -2,33 +2,33 @@
|
|||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
let color = ['#0E7CE2', '#FF8352', '#E271DE', '#F8456B', '#00FFFF', '#4AEAB0'];
|
let color = ['#0E7CE2', '#FF8352', '#E271DE', '#F8456B', '#00FFFF', '#4AEAB0']
|
||||||
let echartData = [
|
let echartData = [
|
||||||
{
|
{
|
||||||
name: '设备1',
|
name: '设备1',
|
||||||
@@ -46,11 +46,11 @@ let echartData = [
|
|||||||
name: '设备4',
|
name: '设备4',
|
||||||
value: '1420',
|
value: '1420',
|
||||||
},
|
},
|
||||||
];
|
]
|
||||||
let formatNumber = function (num) {
|
let formatNumber = function (num) {
|
||||||
let reg = /(?=(\B)(\d{3})+$)/g;
|
let reg = /(?=(\B)(\d{3})+$)/g
|
||||||
return num.toString().replace(reg, ',');
|
return num.toString().replace(reg, ',')
|
||||||
};
|
}
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
backgroundColor: '#364686',
|
backgroundColor: '#364686',
|
||||||
@@ -123,7 +123,9 @@ const options = {
|
|||||||
label: {
|
label: {
|
||||||
normal: {
|
normal: {
|
||||||
formatter: (params) => {
|
formatter: (params) => {
|
||||||
return '{icon|●}{name|' + params.name + '}\n{value|' + formatNumber(params.value) + '}';
|
return (
|
||||||
|
'{icon|●}{name|' + params.name + '}\n{value|' + formatNumber(params.value) + '}'
|
||||||
|
)
|
||||||
},
|
},
|
||||||
padding: [0, -70, 30, -70],
|
padding: [0, -70, 30, -70],
|
||||||
rich: {
|
rich: {
|
||||||
@@ -183,8 +185,8 @@ const options = {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
}
|
||||||
let chart:EChartsType;
|
let chart: EChartsType
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -195,6 +197,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -2,34 +2,33 @@
|
|||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
title: [
|
title: [
|
||||||
{
|
{
|
||||||
@@ -132,8 +131,8 @@ const options = {
|
|||||||
data: [100],
|
data: [100],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
}
|
||||||
let chart:EChartsType;
|
let chart: EChartsType
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -144,6 +143,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,55 +1,72 @@
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
var data = [],data2=[];
|
var data = [],
|
||||||
|
data2 = []
|
||||||
var trafficWay = [
|
var trafficWay = [
|
||||||
{
|
{
|
||||||
name: '病假',
|
name: '病假',
|
||||||
value: 20
|
value: 20,
|
||||||
},{
|
},
|
||||||
|
{
|
||||||
name: '事假',
|
name: '事假',
|
||||||
value: 1
|
value: 1,
|
||||||
},{
|
},
|
||||||
|
{
|
||||||
name: '婚假',
|
name: '婚假',
|
||||||
value: 30
|
value: 30,
|
||||||
},{
|
},
|
||||||
|
{
|
||||||
name: '丧假',
|
name: '丧假',
|
||||||
value: 40
|
value: 40,
|
||||||
},{
|
},
|
||||||
|
{
|
||||||
name: '年休假',
|
name: '年休假',
|
||||||
value: 40
|
value: 40,
|
||||||
}];
|
},
|
||||||
var color=['#2A8BFD','#BAFF7F','#00FAC1','#00CAFF','#FDE056','#4ED33C','#FF8A26','#FF5252','#9689FF','#CB00FF']
|
]
|
||||||
|
var color = [
|
||||||
|
'#2A8BFD',
|
||||||
|
'#BAFF7F',
|
||||||
|
'#00FAC1',
|
||||||
|
'#00CAFF',
|
||||||
|
'#FDE056',
|
||||||
|
'#4ED33C',
|
||||||
|
'#FF8A26',
|
||||||
|
'#FF5252',
|
||||||
|
'#9689FF',
|
||||||
|
'#CB00FF',
|
||||||
|
]
|
||||||
for (var i = 0; i < trafficWay.length; i++) {
|
for (var i = 0; i < trafficWay.length; i++) {
|
||||||
data.push({
|
data.push(
|
||||||
|
{
|
||||||
value: trafficWay[i].value,
|
value: trafficWay[i].value,
|
||||||
name: trafficWay[i].name,
|
name: trafficWay[i].name,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
@@ -58,28 +75,30 @@ for (var i = 0; i < trafficWay.length; i++) {
|
|||||||
shadowBlur: 20,
|
shadowBlur: 20,
|
||||||
borderRadius: 20,
|
borderRadius: 20,
|
||||||
borderColor: color[i],
|
borderColor: color[i],
|
||||||
shadowColor: color[i]
|
shadowColor: color[i],
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}, {
|
},
|
||||||
|
{
|
||||||
value: 5,
|
value: 5,
|
||||||
name: '',
|
name: '',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
label: {
|
label: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
labelLine: {
|
labelLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
color: 'rgba(0, 0, 0, 0)',
|
color: 'rgba(0, 0, 0, 0)',
|
||||||
borderColor: 'rgba(0, 0, 0, 0)',
|
borderColor: 'rgba(0, 0, 0, 0)',
|
||||||
borderWidth: 0
|
borderWidth: 0,
|
||||||
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
});
|
)
|
||||||
data2.push({
|
data2.push(
|
||||||
|
{
|
||||||
value: trafficWay[i].value,
|
value: trafficWay[i].value,
|
||||||
name: trafficWay[i].name,
|
name: trafficWay[i].name,
|
||||||
},
|
},
|
||||||
@@ -89,26 +108,25 @@ for (var i = 0; i < trafficWay.length; i++) {
|
|||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
label: {
|
label: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
labelLine: {
|
labelLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
color: 'rgba(0, 0, 0, 0)',
|
color: 'rgba(0, 0, 0, 0)',
|
||||||
borderColor: 'rgba(0, 0, 0, 0)',
|
borderColor: 'rgba(0, 0, 0, 0)',
|
||||||
borderWidth: 0,
|
borderWidth: 0,
|
||||||
opacity:0.2
|
opacity: 0.2,
|
||||||
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
let angle = 0;//角度,用来做简单的动画效果的
|
let angle = 0 //角度,用来做简单的动画效果的
|
||||||
|
|
||||||
const option = {
|
const option = {
|
||||||
backgroundColor:"#061740",
|
backgroundColor: '#061740',
|
||||||
color: color,
|
color: color,
|
||||||
legend: {
|
legend: {
|
||||||
right: '10%',
|
right: '10%',
|
||||||
@@ -118,204 +136,212 @@ const option = {
|
|||||||
itemHeight: 15,
|
itemHeight: 15,
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#ffffff',
|
color: '#ffffff',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{//外线1
|
{
|
||||||
name: "ring5",
|
//外线1
|
||||||
|
name: 'ring5',
|
||||||
type: 'custom',
|
type: 'custom',
|
||||||
coordinateSystem: "none",
|
coordinateSystem: 'none',
|
||||||
renderItem: function (params, api) {
|
renderItem: function (params, api) {
|
||||||
return {
|
return {
|
||||||
type: 'arc',
|
type: 'arc',
|
||||||
shape: {
|
shape: {
|
||||||
cx: api.getWidth() / 3,
|
cx: api.getWidth() / 3,
|
||||||
cy: api.getHeight() / 2,
|
cy: api.getHeight() / 2,
|
||||||
r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.6,
|
r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.6,
|
||||||
startAngle: (0+angle) * Math.PI / 180,
|
startAngle: ((0 + angle) * Math.PI) / 180,
|
||||||
endAngle: (90+angle) * Math.PI / 180
|
endAngle: ((90 + angle) * Math.PI) / 180,
|
||||||
},
|
},
|
||||||
style: {
|
style: {
|
||||||
stroke: '#4EE9E6',
|
stroke: '#4EE9E6',
|
||||||
fill: "transparent",
|
fill: 'transparent',
|
||||||
lineWidth: 1.5
|
lineWidth: 1.5,
|
||||||
},
|
},
|
||||||
silent: true
|
silent: true,
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
data: [0]
|
data: [0],
|
||||||
},
|
},
|
||||||
{//内线1
|
{
|
||||||
name: "ring5",
|
//内线1
|
||||||
|
name: 'ring5',
|
||||||
type: 'custom',
|
type: 'custom',
|
||||||
coordinateSystem: "none",
|
coordinateSystem: 'none',
|
||||||
renderItem: function (params, api) {
|
renderItem: function (params, api) {
|
||||||
return {
|
return {
|
||||||
type: 'arc',
|
type: 'arc',
|
||||||
shape: {
|
shape: {
|
||||||
cx: api.getWidth() / 3,
|
cx: api.getWidth() / 3,
|
||||||
cy: api.getHeight() / 2,
|
cy: api.getHeight() / 2,
|
||||||
r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.6,
|
r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.6,
|
||||||
startAngle: (180+angle) * Math.PI / 180,
|
startAngle: ((180 + angle) * Math.PI) / 180,
|
||||||
endAngle: (270+angle) * Math.PI / 180
|
endAngle: ((270 + angle) * Math.PI) / 180,
|
||||||
},
|
},
|
||||||
style: {
|
style: {
|
||||||
stroke: "#4EE9E6",
|
stroke: '#4EE9E6',
|
||||||
fill: "transparent",
|
fill: 'transparent',
|
||||||
lineWidth: 1.5
|
lineWidth: 1.5,
|
||||||
},
|
},
|
||||||
silent: true
|
silent: true,
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
data: [0]
|
data: [0],
|
||||||
},
|
},
|
||||||
{//外线2
|
{
|
||||||
name: "ring5",
|
//外线2
|
||||||
|
name: 'ring5',
|
||||||
type: 'custom',
|
type: 'custom',
|
||||||
coordinateSystem: "none",
|
coordinateSystem: 'none',
|
||||||
renderItem: function (params, api) {
|
renderItem: function (params, api) {
|
||||||
return {
|
return {
|
||||||
type: 'arc',
|
type: 'arc',
|
||||||
shape: {
|
shape: {
|
||||||
cx: api.getWidth() / 3,
|
cx: api.getWidth() / 3,
|
||||||
cy: api.getHeight() / 2,
|
cy: api.getHeight() / 2,
|
||||||
r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.65,
|
r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65,
|
||||||
startAngle: (270+-angle) * Math.PI / 180,
|
startAngle: ((270 + -angle) * Math.PI) / 180,
|
||||||
endAngle: (40+-angle) * Math.PI / 180
|
endAngle: ((40 + -angle) * Math.PI) / 180,
|
||||||
},
|
},
|
||||||
style: {
|
style: {
|
||||||
stroke: "#4EE9E6",
|
stroke: '#4EE9E6',
|
||||||
fill: "transparent",
|
fill: 'transparent',
|
||||||
lineWidth: 1.5
|
lineWidth: 1.5,
|
||||||
},
|
},
|
||||||
silent: true
|
silent: true,
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
data: [0]
|
data: [0],
|
||||||
},
|
},
|
||||||
{//外线2
|
{
|
||||||
name: "ring5",
|
//外线2
|
||||||
|
name: 'ring5',
|
||||||
type: 'custom',
|
type: 'custom',
|
||||||
coordinateSystem: "none",
|
coordinateSystem: 'none',
|
||||||
renderItem: function (params, api) {
|
renderItem: function (params, api) {
|
||||||
return {
|
return {
|
||||||
type: 'arc',
|
type: 'arc',
|
||||||
shape: {
|
shape: {
|
||||||
cx: api.getWidth() / 3,
|
cx: api.getWidth() / 3,
|
||||||
cy: api.getHeight() / 2,
|
cy: api.getHeight() / 2,
|
||||||
r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.65,
|
r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65,
|
||||||
startAngle: (90+-angle) * Math.PI / 180,
|
startAngle: ((90 + -angle) * Math.PI) / 180,
|
||||||
endAngle: (220+-angle) * Math.PI / 180
|
endAngle: ((220 + -angle) * Math.PI) / 180,
|
||||||
},
|
},
|
||||||
style: {
|
style: {
|
||||||
stroke: "#4EE9E6",
|
stroke: '#4EE9E6',
|
||||||
fill: "transparent",
|
fill: 'transparent',
|
||||||
lineWidth: 1.5
|
lineWidth: 1.5,
|
||||||
},
|
},
|
||||||
silent: true
|
silent: true,
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
data: [0]
|
data: [0],
|
||||||
},
|
},
|
||||||
{//绿点1
|
{
|
||||||
name: "ring5",
|
//绿点1
|
||||||
|
name: 'ring5',
|
||||||
type: 'custom',
|
type: 'custom',
|
||||||
coordinateSystem: "none",
|
coordinateSystem: 'none',
|
||||||
renderItem: function (params, api) {
|
renderItem: function (params, api) {
|
||||||
let x0 = api.getWidth() / 3;
|
let x0 = api.getWidth() / 3
|
||||||
let y0 = api.getHeight() / 2;
|
let y0 = api.getHeight() / 2
|
||||||
let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.65;
|
let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65
|
||||||
let point = getCirlPoint(x0, y0, r, (90+-angle))
|
let point = getCirlPoint(x0, y0, r, 90 + -angle)
|
||||||
return {
|
return {
|
||||||
type: 'circle',
|
type: 'circle',
|
||||||
shape: {
|
shape: {
|
||||||
cx: point.x,
|
cx: point.x,
|
||||||
cy: point.y,
|
cy: point.y,
|
||||||
r: 4
|
r: 4,
|
||||||
},
|
},
|
||||||
style: {
|
style: {
|
||||||
stroke: "#66FFFF",//粉
|
stroke: '#66FFFF', //粉
|
||||||
fill: "#66FFFF"
|
fill: '#66FFFF',
|
||||||
},
|
},
|
||||||
silent: true
|
silent: true,
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
data: [0]
|
data: [0],
|
||||||
},
|
},
|
||||||
{//绿点2
|
{
|
||||||
name: "ring5", //绿点
|
//绿点2
|
||||||
|
name: 'ring5', //绿点
|
||||||
type: 'custom',
|
type: 'custom',
|
||||||
coordinateSystem: "none",
|
coordinateSystem: 'none',
|
||||||
renderItem: function (params, api) {
|
renderItem: function (params, api) {
|
||||||
let x0 = api.getWidth() / 3;
|
let x0 = api.getWidth() / 3
|
||||||
let y0 = api.getHeight() / 2;
|
let y0 = api.getHeight() / 2
|
||||||
let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.65;
|
let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65
|
||||||
let point = getCirlPoint(x0, y0, r, (270+-angle))
|
let point = getCirlPoint(x0, y0, r, 270 + -angle)
|
||||||
return {
|
return {
|
||||||
type: 'circle',
|
type: 'circle',
|
||||||
shape: {
|
shape: {
|
||||||
cx: point.x,
|
cx: point.x,
|
||||||
cy: point.y,
|
cy: point.y,
|
||||||
r: 4
|
r: 4,
|
||||||
},
|
},
|
||||||
style: {
|
style: {
|
||||||
stroke: "#66FFFF",//粉
|
stroke: '#66FFFF', //粉
|
||||||
fill: "#66FFFF"
|
fill: '#66FFFF',
|
||||||
},
|
},
|
||||||
silent: true
|
silent: true,
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
data: [0]
|
data: [0],
|
||||||
},
|
},
|
||||||
{//绿点3
|
{
|
||||||
name: "ring5",
|
//绿点3
|
||||||
|
name: 'ring5',
|
||||||
type: 'custom',
|
type: 'custom',
|
||||||
coordinateSystem: "none",
|
coordinateSystem: 'none',
|
||||||
renderItem: function (params, api) {
|
renderItem: function (params, api) {
|
||||||
let x0 = api.getWidth() / 3;
|
let x0 = api.getWidth() / 3
|
||||||
let y0 = api.getHeight() / 2;
|
let y0 = api.getHeight() / 2
|
||||||
let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.6;
|
let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.6
|
||||||
let point = getCirlPoint(x0, y0, r, (90+angle))
|
let point = getCirlPoint(x0, y0, r, 90 + angle)
|
||||||
return {
|
return {
|
||||||
type: 'circle',
|
type: 'circle',
|
||||||
shape: {
|
shape: {
|
||||||
cx: point.x,
|
cx: point.x,
|
||||||
cy: point.y,
|
cy: point.y,
|
||||||
r: 4
|
r: 4,
|
||||||
},
|
},
|
||||||
style: {
|
style: {
|
||||||
stroke: "#66FFFF",//粉
|
stroke: '#66FFFF', //粉
|
||||||
fill: "#66FFFF"
|
fill: '#66FFFF',
|
||||||
},
|
},
|
||||||
silent: true
|
silent: true,
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
data: [0]
|
data: [0],
|
||||||
},
|
},
|
||||||
{//绿点4
|
{
|
||||||
name: "ring5", //绿点
|
//绿点4
|
||||||
|
name: 'ring5', //绿点
|
||||||
type: 'custom',
|
type: 'custom',
|
||||||
coordinateSystem: "none",
|
coordinateSystem: 'none',
|
||||||
renderItem: function (params, api) {
|
renderItem: function (params, api) {
|
||||||
let x0 = api.getWidth() / 3;
|
let x0 = api.getWidth() / 3
|
||||||
let y0 = api.getHeight() / 2;
|
let y0 = api.getHeight() / 2
|
||||||
let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.6;
|
let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.6
|
||||||
let point = getCirlPoint(x0, y0, r, (270+angle))
|
let point = getCirlPoint(x0, y0, r, 270 + angle)
|
||||||
return {
|
return {
|
||||||
type: 'circle',
|
type: 'circle',
|
||||||
shape: {
|
shape: {
|
||||||
cx: point.x,
|
cx: point.x,
|
||||||
cy: point.y,
|
cy: point.y,
|
||||||
r: 4
|
r: 4,
|
||||||
},
|
},
|
||||||
style: {
|
style: {
|
||||||
stroke: "#66FFFF",//粉
|
stroke: '#66FFFF', //粉
|
||||||
fill: "#66FFFF"
|
fill: '#66FFFF',
|
||||||
},
|
},
|
||||||
silent: true
|
silent: true,
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
data: [0]
|
data: [0],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '',
|
name: '',
|
||||||
@@ -324,19 +350,19 @@ const option = {
|
|||||||
radius: ['98%', '95%'],
|
radius: ['98%', '95%'],
|
||||||
hoverAnimation: false,
|
hoverAnimation: false,
|
||||||
center: ['33.33%', '50%'],
|
center: ['33.33%', '50%'],
|
||||||
top:"center",
|
top: 'center',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
label: {
|
label: {
|
||||||
show:false
|
show: false,
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
data:data
|
},
|
||||||
|
},
|
||||||
|
data: data,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'pie',
|
type: 'pie',
|
||||||
top:"center",
|
top: 'center',
|
||||||
startAngle: 90,
|
startAngle: 90,
|
||||||
clockwise: false,
|
clockwise: false,
|
||||||
center: ['33.33%', '50%'],
|
center: ['33.33%', '50%'],
|
||||||
@@ -344,16 +370,16 @@ const option = {
|
|||||||
hoverAnimation: false,
|
hoverAnimation: false,
|
||||||
radius: ['94%', '55%'],
|
radius: ['94%', '55%'],
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
opacity:0.15
|
opacity: 0.15,
|
||||||
},
|
},
|
||||||
label: {
|
label: {
|
||||||
show: false,
|
show: false,
|
||||||
position: 'center'
|
position: 'center',
|
||||||
},
|
},
|
||||||
labelLine: {
|
labelLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
data:data2
|
data: data2,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '',
|
name: '',
|
||||||
@@ -362,30 +388,29 @@ const option = {
|
|||||||
center: ['33.33%', '50%'],
|
center: ['33.33%', '50%'],
|
||||||
radius: ['39%', '38%'],
|
radius: ['39%', '38%'],
|
||||||
hoverAnimation: false,
|
hoverAnimation: false,
|
||||||
top:"center",
|
top: 'center',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
label: {
|
label: {
|
||||||
show:false
|
show: false,
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
data:data
|
|
||||||
},
|
},
|
||||||
]
|
},
|
||||||
};
|
data: data,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
//获取圆上面某点的坐标(x0,y0表示坐标,r半径,angle角度)
|
//获取圆上面某点的坐标(x0,y0表示坐标,r半径,angle角度)
|
||||||
function getCirlPoint(x0, y0, r, angle) {
|
function getCirlPoint(x0, y0, r, angle) {
|
||||||
let x1 = x0 + r * Math.cos(angle * Math.PI / 180)
|
let x1 = x0 + r * Math.cos((angle * Math.PI) / 180)
|
||||||
let y1 = y0 + r * Math.sin(angle * Math.PI / 180)
|
let y1 = y0 + r * Math.sin((angle * Math.PI) / 180)
|
||||||
return {
|
return {
|
||||||
x: x1,
|
x: x1,
|
||||||
y: y1
|
y: y1,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let chart: EChartsType
|
||||||
let chart:EChartsType;
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
draw(chart)
|
draw(chart)
|
||||||
@@ -403,11 +428,10 @@ onMounted(()=>{
|
|||||||
setInterval(function () {
|
setInterval(function () {
|
||||||
//用setInterval做动画感觉有问题
|
//用setInterval做动画感觉有问题
|
||||||
draw(chart)
|
draw(chart)
|
||||||
}, 100);
|
}, 100)
|
||||||
|
|
||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -2,230 +2,229 @@
|
|||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
let datalist = [
|
let datalist = [
|
||||||
{
|
{
|
||||||
name: "公共平台"
|
name: '公共平台',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统0000"
|
name: '系统0000',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统0011"
|
name: '系统0011',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统0022"
|
name: '系统0022',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统0033"
|
name: '系统0033',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统0044"
|
name: '系统0044',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统0055"
|
name: '系统0055',
|
||||||
},{
|
|
||||||
name: "系统11"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统22"
|
name: '系统11',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统33"
|
name: '系统22',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统44"
|
name: '系统33',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统55"
|
name: '系统44',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统66"
|
name: '系统55',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统77"
|
name: '系统66',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统88"
|
name: '系统77',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统99"
|
name: '系统88',
|
||||||
}
|
},
|
||||||
];
|
{
|
||||||
|
name: '系统99',
|
||||||
|
},
|
||||||
|
]
|
||||||
let linksData = [
|
let linksData = [
|
||||||
{
|
{
|
||||||
source: "公共平台",
|
source: '公共平台',
|
||||||
target: "系统0000",
|
target: '系统0000',
|
||||||
value: 1044305
|
value: 1044305,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "公共平台",
|
source: '公共平台',
|
||||||
target: "系统0011",
|
target: '系统0011',
|
||||||
value: 651527
|
value: 651527,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "公共平台",
|
source: '公共平台',
|
||||||
target: "系统0022",
|
target: '系统0022',
|
||||||
value: 651527
|
value: 651527,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "公共平台",
|
source: '公共平台',
|
||||||
target: "系统0033",
|
target: '系统0033',
|
||||||
value: 486710
|
value: 486710,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "公共平台",
|
source: '公共平台',
|
||||||
target: "系统0044",
|
target: '系统0044',
|
||||||
value: 212670
|
value: 212670,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "公共平台",
|
source: '公共平台',
|
||||||
target: "系统0055",
|
target: '系统0055',
|
||||||
value: 210400
|
value: 210400,
|
||||||
},{
|
|
||||||
source: "系统0011",
|
|
||||||
target: "系统11",
|
|
||||||
value: 645246
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "系统0022",
|
source: '系统0011',
|
||||||
target: "系统22",
|
target: '系统11',
|
||||||
value: 513275
|
value: 645246,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "系统0011",
|
source: '系统0022',
|
||||||
target: "系统33",
|
target: '系统22',
|
||||||
value: 282986
|
value: 513275,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "系统0011",
|
source: '系统0011',
|
||||||
target: "系统44",
|
target: '系统33',
|
||||||
value: 118655
|
value: 282986,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "系统0022",
|
source: '系统0011',
|
||||||
target: "系统55",
|
target: '系统44',
|
||||||
value: 105989
|
value: 118655,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "系统0022",
|
source: '系统0022',
|
||||||
target: "系统66",
|
target: '系统55',
|
||||||
value: 95100
|
value: 105989,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "系统0033",
|
source: '系统0022',
|
||||||
target: "系统77",
|
target: '系统66',
|
||||||
value: 87796
|
value: 95100,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "系统0044",
|
source: '系统0033',
|
||||||
target: "系统88",
|
target: '系统77',
|
||||||
value: 47658
|
value: 87796,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "系统0055",
|
source: '系统0044',
|
||||||
target: "系统99",
|
target: '系统88',
|
||||||
value: 243660
|
value: 47658,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
source: '系统0055',
|
||||||
];
|
target: '系统99',
|
||||||
|
value: 243660,
|
||||||
|
},
|
||||||
|
]
|
||||||
let Color = [
|
let Color = [
|
||||||
"#61FEFF",
|
'#61FEFF',
|
||||||
"#937FE6",
|
'#937FE6',
|
||||||
"#2B56D3",
|
'#2B56D3',
|
||||||
"#87E7AA",
|
'#87E7AA',
|
||||||
"#937FE6",
|
'#937FE6',
|
||||||
"#FF9B97",
|
'#FF9B97',
|
||||||
"#8f23f5",
|
'#8f23f5',
|
||||||
"#0576ea",
|
'#0576ea',
|
||||||
"#2cb8cf",
|
'#2cb8cf',
|
||||||
"#8A7EE0",
|
'#8A7EE0',
|
||||||
"#2cb8cf",
|
'#2cb8cf',
|
||||||
"#4e70f0",
|
'#4e70f0',
|
||||||
"#1fa3de",
|
'#1fa3de',
|
||||||
"#bbc951",
|
'#bbc951',
|
||||||
"#FFC14B",
|
'#FFC14B',
|
||||||
"#b785a6",
|
'#b785a6',
|
||||||
|
]
|
||||||
]; let Color1 = [
|
let Color1 = [
|
||||||
"#04E0F3",
|
'#04E0F3',
|
||||||
"#682EFC",
|
'#682EFC',
|
||||||
"#35A7FE",
|
'#35A7FE',
|
||||||
"#0DC09F",
|
'#0DC09F',
|
||||||
"#682EFC",
|
'#682EFC',
|
||||||
"#ED6663",
|
'#ED6663',
|
||||||
"#8f23f5",
|
'#8f23f5',
|
||||||
"#0576ea",
|
'#0576ea',
|
||||||
"#2cb8cf",
|
'#2cb8cf',
|
||||||
"#8A7EE0",
|
'#8A7EE0',
|
||||||
"#2cb8cf",
|
'#2cb8cf',
|
||||||
"#4e70f0",
|
'#4e70f0',
|
||||||
"#1fa3de",
|
'#1fa3de',
|
||||||
"#bbc951",
|
'#bbc951',
|
||||||
"#FFC14B",
|
'#FFC14B',
|
||||||
"#b785a6",
|
'#b785a6',
|
||||||
|
]
|
||||||
];
|
|
||||||
let sourceLabel = [
|
let sourceLabel = [
|
||||||
"right",
|
'right',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left"
|
'left',
|
||||||
];
|
]
|
||||||
let itemStyleColor = [];
|
let itemStyleColor = []
|
||||||
let labelSource = [];
|
let labelSource = []
|
||||||
for (let i = 0; i < datalist.length; i++) {
|
for (let i = 0; i < datalist.length; i++) {
|
||||||
datalist[i].label = {
|
datalist[i].label = {
|
||||||
normal: {
|
normal: {
|
||||||
position: sourceLabel[i]
|
position: sourceLabel[i],
|
||||||
|
},
|
||||||
}
|
}
|
||||||
};
|
labelSource.push(sourceLabel[i])
|
||||||
labelSource.push(sourceLabel[i]);
|
|
||||||
}
|
}
|
||||||
for (let d = 0; d < datalist.length; d++) {
|
for (let d = 0; d < datalist.length; d++) {
|
||||||
datalist[d].itemStyle = {
|
datalist[d].itemStyle = {
|
||||||
normal: {
|
normal: {
|
||||||
// color: Color[d]
|
// color: Color[d]
|
||||||
color: {
|
color: {
|
||||||
type: "linear",
|
type: 'linear',
|
||||||
x: 0,
|
x: 0,
|
||||||
y: 1,
|
y: 1,
|
||||||
x2: 0,
|
x2: 0,
|
||||||
@@ -242,57 +241,59 @@ for (let d = 0; d < datalist.length; d++) {
|
|||||||
],
|
],
|
||||||
global: false, // 缺省为 false
|
global: false, // 缺省为 false
|
||||||
},
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
};
|
itemStyleColor.push(datalist[d])
|
||||||
itemStyleColor.push(datalist[d]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
backgroundColor: "#031d7a",
|
backgroundColor: '#031d7a',
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: "item",
|
trigger: 'item',
|
||||||
triggerOn: "mousemove",
|
triggerOn: 'mousemove',
|
||||||
formatter: function (params) {
|
formatter: function (params) {
|
||||||
if (params.name == "公共平台") {
|
if (params.name == '公共平台') {
|
||||||
return " 公共平台 "
|
return ' 公共平台 '
|
||||||
} else {
|
} else {
|
||||||
let value = params.data.value;
|
let value = params.data.value
|
||||||
if (!value && value !== 0) return 0;
|
if (!value && value !== 0) return 0
|
||||||
let str = value.toString();
|
let str = value.toString()
|
||||||
let reg = str.indexOf(".") > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g;
|
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
|
||||||
if (params.data.source == "公共平台") {
|
if (params.data.source == '公共平台') {
|
||||||
return params.data.target + " : " + str.replace(reg, "$1,");
|
return params.data.target + ' : ' + str.replace(reg, '$1,')
|
||||||
} else {
|
} else {
|
||||||
return params.data.source + " : " + str.replace(reg, "$1,");
|
return params.data.source + ' : ' + str.replace(reg, '$1,')
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
series: [{
|
},
|
||||||
type: "sankey",
|
series: [
|
||||||
layout: "none",
|
{
|
||||||
top: "4%",
|
type: 'sankey',
|
||||||
bottom: "12%",
|
layout: 'none',
|
||||||
left: "20",
|
top: '4%',
|
||||||
right: "20",
|
bottom: '12%',
|
||||||
|
left: '20',
|
||||||
|
right: '20',
|
||||||
nodeGap: 15,
|
nodeGap: 15,
|
||||||
nodeWidth: 25,
|
nodeWidth: 25,
|
||||||
focusNodeAdjacency: "allEdges",
|
focusNodeAdjacency: 'allEdges',
|
||||||
data: itemStyleColor,
|
data: itemStyleColor,
|
||||||
links: linksData,
|
links: linksData,
|
||||||
label: {
|
label: {
|
||||||
normal: {
|
normal: {
|
||||||
color: "#fff",
|
color: '#fff',
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
formatter: function (params) {
|
formatter: function (params) {
|
||||||
if (params.data.name == '公共平台') {
|
if (params.data.name == '公共平台') {
|
||||||
let strs = params.data.name.split(''); //字符串数组
|
let strs = params.data.name.split('') //字符串数组
|
||||||
let str = ''
|
let str = ''
|
||||||
for (let i = 0, s; s = strs[i++];) { //遍历字符串数组
|
for (let i = 0, s; (s = strs[i++]); ) {
|
||||||
str += s;
|
//遍历字符串数组
|
||||||
if (!(i % 1)) str += '\n'; //按需要求余
|
str += s
|
||||||
|
if (!(i % 1)) str += '\n' //按需要求余
|
||||||
}
|
}
|
||||||
return "{white|" + str + "}"
|
return '{white|' + str + '}'
|
||||||
} else {
|
} else {
|
||||||
return params.data.name
|
return params.data.name
|
||||||
}
|
}
|
||||||
@@ -301,27 +302,28 @@ const options = {
|
|||||||
white: {
|
white: {
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
lineHeight: 30,
|
lineHeight: 30,
|
||||||
padding: [0, 0, 0, -26]
|
padding: [0, 0, 0, -26],
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
opacity: 0.4,
|
opacity: 0.4,
|
||||||
color: "source",
|
color: 'source',
|
||||||
curveness: 0.5
|
curveness: 0.5,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
borderWidth: 1,
|
borderWidth: 1,
|
||||||
borderColor: "transparent"
|
borderColor: 'transparent',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
}
|
let chart: EChartsType
|
||||||
}]
|
|
||||||
};
|
|
||||||
let chart:EChartsType;
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -332,6 +334,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,40 +1,38 @@
|
|||||||
export const cityIconData = [
|
export const cityIconData = [
|
||||||
{
|
{
|
||||||
adcode: 650000,
|
adcode: 650000,
|
||||||
name: "新疆维吾尔自治区",
|
name: '新疆维吾尔自治区',
|
||||||
value:[88.999903,43.607078]
|
value: [88.999903, 43.607078],
|
||||||
},{
|
|
||||||
adcode: 150000,
|
|
||||||
name: "内蒙古自治区",
|
|
||||||
value:[119.24787,42.205741]
|
|
||||||
},
|
},
|
||||||
,{
|
{
|
||||||
adcode: 150000,
|
adcode: 150000,
|
||||||
name: "内蒙古自治区",
|
name: '内蒙古自治区',
|
||||||
value:[110.627161,41.16628]
|
value: [119.24787, 42.205741],
|
||||||
|
},
|
||||||
|
,
|
||||||
|
{
|
||||||
|
adcode: 150000,
|
||||||
|
name: '内蒙古自治区',
|
||||||
|
value: [110.627161, 41.16628],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
adcode: 540000,
|
adcode: 540000,
|
||||||
name: "西藏自治区",
|
name: '西藏自治区',
|
||||||
value:[89.483714,30.251951]
|
value: [89.483714, 30.251951],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
adcode: 630000,
|
adcode: 630000,
|
||||||
name: "青海省",
|
name: '青海省',
|
||||||
value:[102.064693,37.084008]
|
value: [102.064693, 37.084008],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
adcode: 530000,
|
adcode: 530000,
|
||||||
name: "云南省",
|
name: '云南省',
|
||||||
value:[102.187665,25.083688]
|
value: [102.187665, 25.083688],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
adcode: 610000,
|
adcode: 610000,
|
||||||
name: "陕西省",
|
name: '陕西省',
|
||||||
value:[109.20663,35.018625]
|
value: [109.20663, 35.018625],
|
||||||
},
|
},
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
198
src/views/charts/components/map/bmap.min.js
vendored
198
src/views/charts/components/map/bmap.min.js
vendored
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
* or more contributor license agreements. See the NOTICE file
|
* or more contributor license agreements. See the NOTICE file
|
||||||
@@ -18,5 +17,198 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
!(function (t, e) {
|
||||||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("echarts")):"function"==typeof define&&define.amd?define(["exports","echarts"],e):e(t.bmap={},t.echarts)}(this,function(t,e){"use strict";function o(t,e){this._bmap=t,this.dimensions=["lng","lat"],this._mapOffset=[0,0],this._api=e,this._projection=new BMap.MercatorProjection}function n(t,o){return o=o||[0,0],e.util.map([0,1],function(e){var n=o[e],i=t[e]/2,a=[],r=[];return a[e]=n-i,r[e]=n+i,a[1-e]=r[1-e]=o[1-e],Math.abs(this.dataToPoint(a)[e]-this.dataToPoint(r)[e])},this)}function i(){function t(t){this._root=t}return t.prototype=new BMap.Overlay,t.prototype.initialize=function(t){return t.getPanes().labelPane.appendChild(this._root),this._root},t.prototype.draw=function(){},t}function a(t,e){return t&&e&&t[0]===e[0]&&t[1]===e[1]}o.prototype.dimensions=["lng","lat"],o.prototype.setZoom=function(t){this._zoom=t},o.prototype.setCenter=function(t){this._center=this._projection.lngLatToPoint(new BMap.Point(t[0],t[1]))},o.prototype.setMapOffset=function(t){this._mapOffset=t},o.prototype.getBMap=function(){return this._bmap},o.prototype.dataToPoint=function(t){var e=new BMap.Point(t[0],t[1]),o=this._bmap.pointToOverlayPixel(e),n=this._mapOffset;return[o.x-n[0],o.y-n[1]]},o.prototype.pointToData=function(t){var e=this._mapOffset;return[(t=this._bmap.overlayPixelToPoint({x:t[0]+e[0],y:t[1]+e[1]})).lng,t.lat]},o.prototype.getViewRect=function(){var t=this._api;return new e.graphic.BoundingRect(0,0,t.getWidth(),t.getHeight())},o.prototype.getRoamTransform=function(){return e.matrix.create()},o.prototype.prepareCustoms=function(t){var o=this.getViewRect();return{coordSys:{type:"bmap",x:o.x,y:o.y,width:o.width,height:o.height},api:{coord:e.util.bind(this.dataToPoint,this),size:e.util.bind(n,this)}}};var r;o.dimensions=o.prototype.dimensions,o.create=function(t,e){var n,a=e.getDom();t.eachComponent("bmap",function(t){var p=e.getZr().painter,s=p.getViewportRoot();if("undefined"==typeof BMap)throw new Error("BMap api is not loaded");if(r=r||i(),n)throw new Error("Only one bmap component can exist");if(!t.__bmap){var m=a.querySelector(".ec-extension-bmap");m&&(s.style.left="0px",s.style.top="0px",a.removeChild(m)),(m=document.createElement("div")).style.cssText="width:100%;height:100%",m.classList.add("ec-extension-bmap"),a.appendChild(m);var c=t.__bmap=new BMap.Map(m),d=new r(s);c.addOverlay(d),p.getViewportRootOffset=function(){return{offsetLeft:0,offsetTop:0}}}var c=t.__bmap,f=t.get("center"),l=t.get("zoom");if(f&&l){var h=new BMap.Point(f[0],f[1]);c.centerAndZoom(h,l)}(n=new o(c,e)).setMapOffset(t.__mapOffset||[0,0]),n.setZoom(l),n.setCenter(f),t.coordinateSystem=n}),t.eachSeries(function(t){"bmap"===t.get("coordinateSystem")&&(t.coordinateSystem=n)})},e.extendComponentModel({type:"bmap",getBMap:function(){return this.__bmap},setCenterAndZoom:function(t,e){this.option.center=t,this.option.zoom=e},centerOrZoomChanged:function(t,e){var o=this.option;return!(a(t,o.center)&&e===o.zoom)},defaultOption:{center:[104.114129,37.550339],zoom:5,mapStyle:{},roam:!1}}),e.extendComponentView({type:"bmap",render:function(t,e,o){function n(){i||o.dispatchAction({type:"bmapRoam"})}var i=!0,a=t.getBMap(),r=o.getZr().painter.getViewportRoot(),p=t.coordinateSystem,s=function(e,n){if(!i){var a=r.parentNode.parentNode.parentNode,s=[-parseInt(a.style.left,10)||0,-parseInt(a.style.top,10)||0];r.style.left=s[0]+"px",r.style.top=s[1]+"px",p.setMapOffset(s),t.__mapOffset=s,o.dispatchAction({type:"bmapRoam"})}};a.removeEventListener("moving",this._oldMoveHandler),a.removeEventListener("zoomend",this._oldZoomEndHandler),a.addEventListener("moving",s),a.addEventListener("zoomend",n),this._oldMoveHandler=s,this._oldZoomEndHandler=n;var m=t.get("roam");m&&"scale"!==m?a.enableDragging():a.disableDragging(),m&&"move"!==m?(a.enableScrollWheelZoom(),a.enableDoubleClickZoom(),a.enablePinchToZoom()):(a.disableScrollWheelZoom(),a.disableDoubleClickZoom(),a.disablePinchToZoom());var c=t.__mapStyle,d=t.get("mapStyle")||{},f=JSON.stringify(d);JSON.stringify(c)!==f&&(Object.keys(d).length&&a.setMapStyle(d),t.__mapStyle=JSON.parse(f)),i=!1}}),e.registerCoordinateSystem("bmap",o),e.registerAction({type:"bmapRoam",event:"bmapRoam",update:"updateLayout"},function(t,e){e.eachComponent("bmap",function(t){var e=t.getBMap(),o=e.getCenter();t.setCenterAndZoom([o.lng,o.lat],e.getZoom())})});t.version="1.0.0"});
|
'object' == typeof exports && 'undefined' != typeof module
|
||||||
|
? e(exports, require('echarts'))
|
||||||
|
: 'function' == typeof define && define.amd
|
||||||
|
? define(['exports', 'echarts'], e)
|
||||||
|
: e((t.bmap = {}), t.echarts)
|
||||||
|
})(this, function (t, e) {
|
||||||
|
'use strict'
|
||||||
|
function o(t, e) {
|
||||||
|
;(this._bmap = t),
|
||||||
|
(this.dimensions = ['lng', 'lat']),
|
||||||
|
(this._mapOffset = [0, 0]),
|
||||||
|
(this._api = e),
|
||||||
|
(this._projection = new BMap.MercatorProjection())
|
||||||
|
}
|
||||||
|
function n(t, o) {
|
||||||
|
return (
|
||||||
|
(o = o || [0, 0]),
|
||||||
|
e.util.map(
|
||||||
|
[0, 1],
|
||||||
|
function (e) {
|
||||||
|
var n = o[e],
|
||||||
|
i = t[e] / 2,
|
||||||
|
a = [],
|
||||||
|
r = []
|
||||||
|
return (
|
||||||
|
(a[e] = n - i),
|
||||||
|
(r[e] = n + i),
|
||||||
|
(a[1 - e] = r[1 - e] = o[1 - e]),
|
||||||
|
Math.abs(this.dataToPoint(a)[e] - this.dataToPoint(r)[e])
|
||||||
|
)
|
||||||
|
},
|
||||||
|
this,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
function i() {
|
||||||
|
function t(t) {
|
||||||
|
this._root = t
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
(t.prototype = new BMap.Overlay()),
|
||||||
|
(t.prototype.initialize = function (t) {
|
||||||
|
return t.getPanes().labelPane.appendChild(this._root), this._root
|
||||||
|
}),
|
||||||
|
(t.prototype.draw = function () {}),
|
||||||
|
t
|
||||||
|
)
|
||||||
|
}
|
||||||
|
function a(t, e) {
|
||||||
|
return t && e && t[0] === e[0] && t[1] === e[1]
|
||||||
|
}
|
||||||
|
;(o.prototype.dimensions = ['lng', 'lat']),
|
||||||
|
(o.prototype.setZoom = function (t) {
|
||||||
|
this._zoom = t
|
||||||
|
}),
|
||||||
|
(o.prototype.setCenter = function (t) {
|
||||||
|
this._center = this._projection.lngLatToPoint(new BMap.Point(t[0], t[1]))
|
||||||
|
}),
|
||||||
|
(o.prototype.setMapOffset = function (t) {
|
||||||
|
this._mapOffset = t
|
||||||
|
}),
|
||||||
|
(o.prototype.getBMap = function () {
|
||||||
|
return this._bmap
|
||||||
|
}),
|
||||||
|
(o.prototype.dataToPoint = function (t) {
|
||||||
|
var e = new BMap.Point(t[0], t[1]),
|
||||||
|
o = this._bmap.pointToOverlayPixel(e),
|
||||||
|
n = this._mapOffset
|
||||||
|
return [o.x - n[0], o.y - n[1]]
|
||||||
|
}),
|
||||||
|
(o.prototype.pointToData = function (t) {
|
||||||
|
var e = this._mapOffset
|
||||||
|
return [(t = this._bmap.overlayPixelToPoint({ x: t[0] + e[0], y: t[1] + e[1] })).lng, t.lat]
|
||||||
|
}),
|
||||||
|
(o.prototype.getViewRect = function () {
|
||||||
|
var t = this._api
|
||||||
|
return new e.graphic.BoundingRect(0, 0, t.getWidth(), t.getHeight())
|
||||||
|
}),
|
||||||
|
(o.prototype.getRoamTransform = function () {
|
||||||
|
return e.matrix.create()
|
||||||
|
}),
|
||||||
|
(o.prototype.prepareCustoms = function (t) {
|
||||||
|
var o = this.getViewRect()
|
||||||
|
return {
|
||||||
|
coordSys: { type: 'bmap', x: o.x, y: o.y, width: o.width, height: o.height },
|
||||||
|
api: { coord: e.util.bind(this.dataToPoint, this), size: e.util.bind(n, this) },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
var r
|
||||||
|
;(o.dimensions = o.prototype.dimensions),
|
||||||
|
(o.create = function (t, e) {
|
||||||
|
var n,
|
||||||
|
a = e.getDom()
|
||||||
|
t.eachComponent('bmap', function (t) {
|
||||||
|
var p = e.getZr().painter,
|
||||||
|
s = p.getViewportRoot()
|
||||||
|
if ('undefined' == typeof BMap) throw new Error('BMap api is not loaded')
|
||||||
|
if (((r = r || i()), n)) throw new Error('Only one bmap component can exist')
|
||||||
|
if (!t.__bmap) {
|
||||||
|
var m = a.querySelector('.ec-extension-bmap')
|
||||||
|
m && ((s.style.left = '0px'), (s.style.top = '0px'), a.removeChild(m)),
|
||||||
|
((m = document.createElement('div')).style.cssText = 'width:100%;height:100%'),
|
||||||
|
m.classList.add('ec-extension-bmap'),
|
||||||
|
a.appendChild(m)
|
||||||
|
var c = (t.__bmap = new BMap.Map(m)),
|
||||||
|
d = new r(s)
|
||||||
|
c.addOverlay(d),
|
||||||
|
(p.getViewportRootOffset = function () {
|
||||||
|
return { offsetLeft: 0, offsetTop: 0 }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
var c = t.__bmap,
|
||||||
|
f = t.get('center'),
|
||||||
|
l = t.get('zoom')
|
||||||
|
if (f && l) {
|
||||||
|
var h = new BMap.Point(f[0], f[1])
|
||||||
|
c.centerAndZoom(h, l)
|
||||||
|
}
|
||||||
|
;(n = new o(c, e)).setMapOffset(t.__mapOffset || [0, 0]),
|
||||||
|
n.setZoom(l),
|
||||||
|
n.setCenter(f),
|
||||||
|
(t.coordinateSystem = n)
|
||||||
|
}),
|
||||||
|
t.eachSeries(function (t) {
|
||||||
|
'bmap' === t.get('coordinateSystem') && (t.coordinateSystem = n)
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
e.extendComponentModel({
|
||||||
|
type: 'bmap',
|
||||||
|
getBMap: function () {
|
||||||
|
return this.__bmap
|
||||||
|
},
|
||||||
|
setCenterAndZoom: function (t, e) {
|
||||||
|
;(this.option.center = t), (this.option.zoom = e)
|
||||||
|
},
|
||||||
|
centerOrZoomChanged: function (t, e) {
|
||||||
|
var o = this.option
|
||||||
|
return !(a(t, o.center) && e === o.zoom)
|
||||||
|
},
|
||||||
|
defaultOption: { center: [104.114129, 37.550339], zoom: 5, mapStyle: {}, roam: !1 },
|
||||||
|
}),
|
||||||
|
e.extendComponentView({
|
||||||
|
type: 'bmap',
|
||||||
|
render: function (t, e, o) {
|
||||||
|
function n() {
|
||||||
|
i || o.dispatchAction({ type: 'bmapRoam' })
|
||||||
|
}
|
||||||
|
var i = !0,
|
||||||
|
a = t.getBMap(),
|
||||||
|
r = o.getZr().painter.getViewportRoot(),
|
||||||
|
p = t.coordinateSystem,
|
||||||
|
s = function (e, n) {
|
||||||
|
if (!i) {
|
||||||
|
var a = r.parentNode.parentNode.parentNode,
|
||||||
|
s = [-parseInt(a.style.left, 10) || 0, -parseInt(a.style.top, 10) || 0]
|
||||||
|
;(r.style.left = s[0] + 'px'),
|
||||||
|
(r.style.top = s[1] + 'px'),
|
||||||
|
p.setMapOffset(s),
|
||||||
|
(t.__mapOffset = s),
|
||||||
|
o.dispatchAction({ type: 'bmapRoam' })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
a.removeEventListener('moving', this._oldMoveHandler),
|
||||||
|
a.removeEventListener('zoomend', this._oldZoomEndHandler),
|
||||||
|
a.addEventListener('moving', s),
|
||||||
|
a.addEventListener('zoomend', n),
|
||||||
|
(this._oldMoveHandler = s),
|
||||||
|
(this._oldZoomEndHandler = n)
|
||||||
|
var m = t.get('roam')
|
||||||
|
m && 'scale' !== m ? a.enableDragging() : a.disableDragging(),
|
||||||
|
m && 'move' !== m
|
||||||
|
? (a.enableScrollWheelZoom(), a.enableDoubleClickZoom(), a.enablePinchToZoom())
|
||||||
|
: (a.disableScrollWheelZoom(), a.disableDoubleClickZoom(), a.disablePinchToZoom())
|
||||||
|
var c = t.__mapStyle,
|
||||||
|
d = t.get('mapStyle') || {},
|
||||||
|
f = JSON.stringify(d)
|
||||||
|
JSON.stringify(c) !== f &&
|
||||||
|
(Object.keys(d).length && a.setMapStyle(d), (t.__mapStyle = JSON.parse(f))),
|
||||||
|
(i = !1)
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
e.registerCoordinateSystem('bmap', o),
|
||||||
|
e.registerAction(
|
||||||
|
{ type: 'bmapRoam', event: 'bmapRoam', update: 'updateLayout' },
|
||||||
|
function (t, e) {
|
||||||
|
e.eachComponent('bmap', function (t) {
|
||||||
|
var e = t.getBMap(),
|
||||||
|
o = e.getCenter()
|
||||||
|
t.setCenterAndZoom([o.lng, o.lat], e.getZoom())
|
||||||
|
})
|
||||||
|
},
|
||||||
|
)
|
||||||
|
t.version = '1.0.0'
|
||||||
|
})
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
@@ -6,127 +5,125 @@
|
|||||||
import 'echarts-liquidfill/src/liquidFill.js'
|
import 'echarts-liquidfill/src/liquidFill.js'
|
||||||
import './china.js'
|
import './china.js'
|
||||||
import './bmap.min.js'
|
import './bmap.min.js'
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
//城市经纬度
|
//城市经纬度
|
||||||
var geoCoordMap = {
|
var geoCoordMap = {
|
||||||
"北京": [116.46, 39.92],
|
北京: [116.46, 39.92],
|
||||||
"成都": [104.06, 30.67],
|
成都: [104.06, 30.67],
|
||||||
"杭州": [120.19, 30.26],
|
杭州: [120.19, 30.26],
|
||||||
"济南": [117, 36.65],
|
济南: [117, 36.65],
|
||||||
"福州": [119.3, 26.08],
|
福州: [119.3, 26.08],
|
||||||
"上海": [121.48, 31.22],
|
上海: [121.48, 31.22],
|
||||||
"重庆": [106.54, 29.59],
|
重庆: [106.54, 29.59],
|
||||||
"深圳": [114.07, 22.62],
|
深圳: [114.07, 22.62],
|
||||||
"宁波": [121.56, 29.86],
|
宁波: [121.56, 29.86],
|
||||||
"南昌": [115.89, 28.68],
|
南昌: [115.89, 28.68],
|
||||||
"广州": [113.23, 23.16],
|
广州: [113.23, 23.16],
|
||||||
"厦门": [118.1, 24.46],
|
厦门: [118.1, 24.46],
|
||||||
"太原": [112.53, 37.87],
|
太原: [112.53, 37.87],
|
||||||
"哈尔滨": [126.63, 45.75],
|
哈尔滨: [126.63, 45.75],
|
||||||
"西安": [108.95, 34.27],
|
西安: [108.95, 34.27],
|
||||||
"沈阳": [123.38, 41.8],
|
沈阳: [123.38, 41.8],
|
||||||
"大连": [121.62, 38.92],
|
大连: [121.62, 38.92],
|
||||||
"海口": [110.35, 20.02],
|
海口: [110.35, 20.02],
|
||||||
"长沙": [113, 28.21],
|
长沙: [113, 28.21],
|
||||||
"银川": [106.27, 38.47],
|
银川: [106.27, 38.47],
|
||||||
"石家庄": [114.48, 38.03],
|
石家庄: [114.48, 38.03],
|
||||||
"昆明": [102.73, 25.04],
|
昆明: [102.73, 25.04],
|
||||||
"武汉": [114.31, 30.52],
|
武汉: [114.31, 30.52],
|
||||||
"呼和浩特": [111.65, 40.82],
|
呼和浩特: [111.65, 40.82],
|
||||||
"天津": [117.2, 39.13],
|
天津: [117.2, 39.13],
|
||||||
"贵阳": [106.71, 26.57],
|
贵阳: [106.71, 26.57],
|
||||||
"兰州": [103.73, 36.03],
|
兰州: [103.73, 36.03],
|
||||||
"青岛": [120.33, 36.07],
|
青岛: [120.33, 36.07],
|
||||||
"南京": [118.78, 32.04],
|
南京: [118.78, 32.04],
|
||||||
"长春": [125.35, 43.88],
|
长春: [125.35, 43.88],
|
||||||
"郑州": [113.65, 34.76],
|
郑州: [113.65, 34.76],
|
||||||
"西宁": [101.74, 36.56],
|
西宁: [101.74, 36.56],
|
||||||
"合肥": [117.27, 31.86],
|
合肥: [117.27, 31.86],
|
||||||
"南宁": [108.33, 22.84],
|
南宁: [108.33, 22.84],
|
||||||
"拉萨": [91.11, 29.97],
|
拉萨: [91.11, 29.97],
|
||||||
"乌鲁木齐": [87.68, 43.77]
|
乌鲁木齐: [87.68, 43.77],
|
||||||
};
|
}
|
||||||
|
|
||||||
|
|
||||||
//数据部分
|
//数据部分
|
||||||
var data = [
|
var data = [
|
||||||
{name:"北京",value:88.8},
|
{ name: '北京', value: 88.8 },
|
||||||
{name:"成都",value:88.7},
|
{ name: '成都', value: 88.7 },
|
||||||
{name:"厦门",value:88.01},
|
{ name: '厦门', value: 88.01 },
|
||||||
{name:"杭州",value:87.9},
|
{ name: '杭州', value: 87.9 },
|
||||||
{name:"济南",value:87.48},
|
{ name: '济南', value: 87.48 },
|
||||||
{name:"福州",value:87.47},
|
{ name: '福州', value: 87.47 },
|
||||||
{name:"上海",value:87.43},
|
{ name: '上海', value: 87.43 },
|
||||||
{name:"重庆",value:87.38},
|
{ name: '重庆', value: 87.38 },
|
||||||
{name:"深圳",value:87.37},
|
{ name: '深圳', value: 87.37 },
|
||||||
{name:"昆明",value:87.26},
|
{ name: '昆明', value: 87.26 },
|
||||||
{name:"宁波",value:87.1},
|
{ name: '宁波', value: 87.1 },
|
||||||
{name:"南昌",value:86.06},
|
{ name: '南昌', value: 86.06 },
|
||||||
{name:"广州",value:85.89},
|
{ name: '广州', value: 85.89 },
|
||||||
{name:"太原",value:84.45},
|
{ name: '太原', value: 84.45 },
|
||||||
{name:"哈尔滨",value:83.96},
|
{ name: '哈尔滨', value: 83.96 },
|
||||||
{name:"西安",value:83.24},
|
{ name: '西安', value: 83.24 },
|
||||||
{name:"沈阳",value:82.96},
|
{ name: '沈阳', value: 82.96 },
|
||||||
{name:"大连",value:82.94},
|
{ name: '大连', value: 82.94 },
|
||||||
{name:"海口",value:82.88},
|
{ name: '海口', value: 82.88 },
|
||||||
{name:"长沙",value:82.85},
|
{ name: '长沙', value: 82.85 },
|
||||||
{name:"银川",value:82.49},
|
{ name: '银川', value: 82.49 },
|
||||||
{name:"石家庄",value:82.24},
|
{ name: '石家庄', value: 82.24 },
|
||||||
{name:"武汉",value:81.68},
|
{ name: '武汉', value: 81.68 },
|
||||||
{name:"呼和浩特",value:81.61},
|
{ name: '呼和浩特', value: 81.61 },
|
||||||
{name:"天津",value:80.99},
|
{ name: '天津', value: 80.99 },
|
||||||
{name:"贵阳",value:80.71},
|
{ name: '贵阳', value: 80.71 },
|
||||||
{name:"兰州",value:80.69},
|
{ name: '兰州', value: 80.69 },
|
||||||
{name:"南京",value:80.65},
|
{ name: '南京', value: 80.65 },
|
||||||
{name:"青岛",value:80.61},
|
{ name: '青岛', value: 80.61 },
|
||||||
{name:"长春",value:80.1},
|
{ name: '长春', value: 80.1 },
|
||||||
{name:"郑州",value:79.56},
|
{ name: '郑州', value: 79.56 },
|
||||||
{name:"西宁",value:79.07},
|
{ name: '西宁', value: 79.07 },
|
||||||
{name:"南宁",value:78.2},
|
{ name: '南宁', value: 78.2 },
|
||||||
{name:"合肥",value:77.29},
|
{ name: '合肥', value: 77.29 },
|
||||||
{name:"乌鲁木齐",value:76.91},
|
{ name: '乌鲁木齐', value: 76.91 },
|
||||||
{name:"拉萨",value:76.01}
|
{ name: '拉萨', value: 76.01 },
|
||||||
];
|
]
|
||||||
var convertData = function (data) {
|
var convertData = function (data) {
|
||||||
var res = [];
|
var res = []
|
||||||
for (var i = 0; i < data.length; i++) {
|
for (var i = 0; i < data.length; i++) {
|
||||||
var geoCoord = geoCoordMap[data[i].name];
|
var geoCoord = geoCoordMap[data[i].name]
|
||||||
if (geoCoord) {
|
if (geoCoord) {
|
||||||
res.push({
|
res.push({
|
||||||
name: data[i].name,
|
name: data[i].name,
|
||||||
value: geoCoord.concat(data[i].value)
|
value: geoCoord.concat(data[i].value),
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return res;
|
return res
|
||||||
};
|
}
|
||||||
|
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
toolbox: {
|
toolbox: {
|
||||||
@@ -134,17 +131,17 @@ const options = {
|
|||||||
feature: {
|
feature: {
|
||||||
dataView: {
|
dataView: {
|
||||||
show: true,
|
show: true,
|
||||||
readOnly: true
|
readOnly: true,
|
||||||
},
|
},
|
||||||
restore: {
|
restore: {
|
||||||
show: true
|
show: true,
|
||||||
},
|
},
|
||||||
saveAsImage: {
|
saveAsImage: {
|
||||||
show: true
|
show: true,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
top: 40,
|
top: 40,
|
||||||
right:40
|
right: 40,
|
||||||
},
|
},
|
||||||
title: {
|
title: {
|
||||||
//text: '2020年全国大厅监测得分',
|
//text: '2020年全国大厅监测得分',
|
||||||
@@ -153,18 +150,18 @@ const options = {
|
|||||||
left: 'center',
|
left: 'center',
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#ffffff',
|
color: '#ffffff',
|
||||||
fontSize: 30
|
fontSize: 30,
|
||||||
},
|
},
|
||||||
subtextStyle: {
|
subtextStyle: {
|
||||||
fontSize: 20
|
fontSize: 20,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
legend: {
|
legend: {
|
||||||
left: 'left',
|
left: 'left',
|
||||||
data: ['强', '中', '弱'],
|
data: ['强', '中', '弱'],
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#ccc'
|
color: '#ccc',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
backgroundColor: {
|
backgroundColor: {
|
||||||
type: 'linear',
|
type: 'linear',
|
||||||
@@ -172,12 +169,17 @@ const options = {
|
|||||||
y: 0,
|
y: 0,
|
||||||
x2: 1,
|
x2: 1,
|
||||||
y2: 1,
|
y2: 1,
|
||||||
colorStops: [{
|
colorStops: [
|
||||||
offset: 0, color: '#0f2c70' // 0% 处的颜色
|
{
|
||||||
}, {
|
offset: 0,
|
||||||
offset: 1, color: '#091732' // 100% 处的颜色
|
color: '#0f2c70', // 0% 处的颜色
|
||||||
}],
|
},
|
||||||
globalCoord: false // 缺省为 false
|
{
|
||||||
|
offset: 1,
|
||||||
|
color: '#091732', // 100% 处的颜色
|
||||||
|
},
|
||||||
|
],
|
||||||
|
globalCoord: false, // 缺省为 false
|
||||||
},
|
},
|
||||||
visualMap: {
|
visualMap: {
|
||||||
min: 75,
|
min: 75,
|
||||||
@@ -187,12 +189,12 @@ const options = {
|
|||||||
calculable: false,
|
calculable: false,
|
||||||
text: ['高', '低'],
|
text: ['高', '低'],
|
||||||
inRange: {
|
inRange: {
|
||||||
color: ['rgb(4, 1, 255)', 'rgb(225, 1, 255)']
|
color: ['rgb(4, 1, 255)', 'rgb(225, 1, 255)'],
|
||||||
},
|
},
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#ffffff',
|
color: '#ffffff',
|
||||||
fontSize: 10
|
fontSize: 10,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
geo: {
|
geo: {
|
||||||
map: 'china',
|
map: 'china',
|
||||||
@@ -200,17 +202,17 @@ const options = {
|
|||||||
roam: true,
|
roam: true,
|
||||||
label: {
|
label: {
|
||||||
emphasis: {
|
emphasis: {
|
||||||
show: true
|
show: true,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
areaColor: '#091632',
|
areaColor: '#091632',
|
||||||
borderColor: '#1773c3',
|
borderColor: '#1773c3',
|
||||||
shadowColor: '#1773c3',
|
shadowColor: '#1773c3',
|
||||||
shadowBlur: 20
|
shadowBlur: 20,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
@@ -226,20 +228,20 @@ const options = {
|
|||||||
emphasis: {
|
emphasis: {
|
||||||
show: false,
|
show: false,
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#fff'
|
color: '#fff',
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
roam: true,
|
roam: true,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
areaColor: '#031525',
|
areaColor: '#031525',
|
||||||
borderColor: '#3B5077',
|
borderColor: '#3B5077',
|
||||||
borderWidth: 1.5
|
borderWidth: 1.5,
|
||||||
},
|
},
|
||||||
emphasis: {
|
emphasis: {
|
||||||
areaColor: '#0f2c70'
|
areaColor: '#0f2c70',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -248,7 +250,7 @@ const options = {
|
|||||||
coordinateSystem: 'geo',
|
coordinateSystem: 'geo',
|
||||||
data: convertData(data),
|
data: convertData(data),
|
||||||
symbolSize: function (val) {
|
symbolSize: function (val) {
|
||||||
return val[2]/8;
|
return val[2] / 8
|
||||||
},
|
},
|
||||||
label: {
|
label: {
|
||||||
normal: {
|
normal: {
|
||||||
@@ -257,23 +259,23 @@ const options = {
|
|||||||
textStyle: {
|
textStyle: {
|
||||||
fontSize: 10,
|
fontSize: 10,
|
||||||
fontWeight: 'bolder',
|
fontWeight: 'bolder',
|
||||||
color:'#ffffff'
|
color: '#ffffff',
|
||||||
},
|
},
|
||||||
show: true
|
show: true,
|
||||||
},
|
},
|
||||||
emphasis: {
|
emphasis: {
|
||||||
show: true
|
show: true,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: '#ddb926'
|
color: '#ddb926',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
}
|
let chart: EChartsType
|
||||||
}
|
|
||||||
]
|
|
||||||
};
|
|
||||||
let chart:EChartsType;
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -284,6 +286,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -11,24 +11,24 @@ import logo from '@/assets/logo.png'
|
|||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => {}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
var geoGpsMap = [109.1162, 34.2004]
|
var geoGpsMap = [109.1162, 34.2004]
|
||||||
@@ -49,7 +49,7 @@ var geoCoordMap = {
|
|||||||
四川: [113.0823, 28.2568],
|
四川: [113.0823, 28.2568],
|
||||||
云南: [102.9199, 25.4663],
|
云南: [102.9199, 25.4663],
|
||||||
广东: [113.12244, 23.009505],
|
广东: [113.12244, 23.009505],
|
||||||
海南: [110.3893, 19.8516]
|
海南: [110.3893, 19.8516],
|
||||||
}
|
}
|
||||||
|
|
||||||
var value = {
|
var value = {
|
||||||
@@ -68,8 +68,7 @@ var value = {
|
|||||||
云南: 10000,
|
云南: 10000,
|
||||||
广东: 10000,
|
广东: 10000,
|
||||||
海南: 10000,
|
海南: 10000,
|
||||||
西藏: 10000
|
西藏: 10000,
|
||||||
|
|
||||||
}
|
}
|
||||||
var colors = '#f9b207'
|
var colors = '#f9b207'
|
||||||
|
|
||||||
@@ -85,7 +84,7 @@ for (var key in geoCoordMap) {
|
|||||||
year: '陕西',
|
year: '陕西',
|
||||||
name: key,
|
name: key,
|
||||||
value: value[key] / 100,
|
value: value[key] / 100,
|
||||||
value1: value[key] / 100
|
value1: value[key] / 100,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,7 +104,7 @@ var convertData = function (data) {
|
|||||||
if (geoCoord) {
|
if (geoCoord) {
|
||||||
res.push({
|
res.push({
|
||||||
name: data[i].name,
|
name: data[i].name,
|
||||||
value: geoCoord.concat(data[i].value)
|
value: geoCoord.concat(data[i].value),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -120,12 +119,15 @@ var convertToLineData = function (data, gps) {
|
|||||||
var fromCoord = gps // 郑州
|
var fromCoord = gps // 郑州
|
||||||
// var toCoord = geoGps[Math.random()*3];
|
// var toCoord = geoGps[Math.random()*3];
|
||||||
if (fromCoord && toCoord) {
|
if (fromCoord && toCoord) {
|
||||||
res.push([{
|
res.push([
|
||||||
|
{
|
||||||
coord: fromCoord,
|
coord: fromCoord,
|
||||||
value: dataItem.value
|
value: dataItem.value,
|
||||||
}, {
|
},
|
||||||
coord: toCoord
|
{
|
||||||
}])
|
coord: toCoord,
|
||||||
|
},
|
||||||
|
])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
@@ -136,7 +138,7 @@ const options = {
|
|||||||
trigger: 'item',
|
trigger: 'item',
|
||||||
formatter(val) {
|
formatter(val) {
|
||||||
// console.log('val==========',val)
|
// console.log('val==========',val)
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
backgroundColor: '#001540',
|
backgroundColor: '#001540',
|
||||||
geo: {
|
geo: {
|
||||||
@@ -147,8 +149,8 @@ const options = {
|
|||||||
center: [101.4038, 36.8207],
|
center: [101.4038, 36.8207],
|
||||||
label: {
|
label: {
|
||||||
emphasis: {
|
emphasis: {
|
||||||
show: false
|
show: false,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
@@ -159,29 +161,31 @@ const options = {
|
|||||||
x: 0.5,
|
x: 0.5,
|
||||||
y: 0.5,
|
y: 0.5,
|
||||||
r: 0.8,
|
r: 0.8,
|
||||||
colorStops: [{
|
colorStops: [
|
||||||
|
{
|
||||||
offset: 0,
|
offset: 0,
|
||||||
color: 'rgba(147, 235, 248, 0)' // 0% 处的颜色
|
color: 'rgba(147, 235, 248, 0)', // 0% 处的颜色
|
||||||
}, {
|
},
|
||||||
|
{
|
||||||
offset: 1,
|
offset: 1,
|
||||||
color: 'rgba(147, 235, 248, .2)' // 100% 处的颜色
|
color: 'rgba(147, 235, 248, .2)', // 100% 处的颜色
|
||||||
}],
|
},
|
||||||
globalCoord: false // 缺省为 false
|
],
|
||||||
|
globalCoord: false, // 缺省为 false
|
||||||
},
|
},
|
||||||
shadowColor: 'rgba(128, 217, 248, 1)',
|
shadowColor: 'rgba(128, 217, 248, 1)',
|
||||||
// shadowColor: 'rgba(255, 255, 255, 1)',
|
// shadowColor: 'rgba(255, 255, 255, 1)',
|
||||||
shadowOffsetX: -2,
|
shadowOffsetX: -2,
|
||||||
shadowOffsetY: 2,
|
shadowOffsetY: 2,
|
||||||
shadowBlur: 10
|
shadowBlur: 10,
|
||||||
},
|
},
|
||||||
emphasis: {
|
emphasis: {
|
||||||
areaColor: '#389BB7',
|
areaColor: '#389BB7',
|
||||||
borderWidth: 0
|
borderWidth: 0,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
|
|
||||||
// 地图?
|
// 地图?
|
||||||
{
|
{
|
||||||
type: 'map',
|
type: 'map',
|
||||||
@@ -191,59 +195,63 @@ const options = {
|
|||||||
showLegendSymbol: false, // 存在legend时显示
|
showLegendSymbol: false, // 存在legend时显示
|
||||||
label: {
|
label: {
|
||||||
normal: {
|
normal: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
emphasis: {
|
emphasis: {
|
||||||
show: false,
|
show: false,
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#fff'
|
color: '#fff',
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
roam: true,
|
roam: true,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
areaColor: '#031525',
|
areaColor: '#031525',
|
||||||
borderColor: '#FFFFFF'
|
borderColor: '#FFFFFF',
|
||||||
},
|
},
|
||||||
emphasis: {
|
emphasis: {
|
||||||
areaColor: '#2B91B7'
|
areaColor: '#2B91B7',
|
||||||
}
|
|
||||||
},
|
},
|
||||||
animation: false
|
},
|
||||||
|
animation: false,
|
||||||
},
|
},
|
||||||
// 地图点的动画效果
|
// 地图点的动画效果
|
||||||
{
|
{
|
||||||
// name: 'Top 5',
|
// name: 'Top 5',
|
||||||
type: 'effectScatter',
|
type: 'effectScatter',
|
||||||
coordinateSystem: 'geo',
|
coordinateSystem: 'geo',
|
||||||
data: convertData(mapData.sort(function (a, b) {
|
data: convertData(
|
||||||
|
mapData
|
||||||
|
.sort(function (a, b) {
|
||||||
return b.value - a.value
|
return b.value - a.value
|
||||||
}).slice(0, 20)),
|
})
|
||||||
|
.slice(0, 20),
|
||||||
|
),
|
||||||
symbolSize: function (val) {
|
symbolSize: function (val) {
|
||||||
return val[2] / 10
|
return val[2] / 10
|
||||||
},
|
},
|
||||||
showEffectOn: 'render',
|
showEffectOn: 'render',
|
||||||
rippleEffect: {
|
rippleEffect: {
|
||||||
brushType: 'stroke'
|
brushType: 'stroke',
|
||||||
},
|
},
|
||||||
hoverAnimation: true,
|
hoverAnimation: true,
|
||||||
label: {
|
label: {
|
||||||
normal: {
|
normal: {
|
||||||
formatter: '{b}',
|
formatter: '{b}',
|
||||||
position: 'right',
|
position: 'right',
|
||||||
show: true
|
show: true,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: colors,
|
color: colors,
|
||||||
shadowBlur: 10,
|
shadowBlur: 10,
|
||||||
shadowColor: colors
|
shadowColor: colors,
|
||||||
}
|
|
||||||
},
|
},
|
||||||
zlevel: 1
|
},
|
||||||
|
zlevel: 1,
|
||||||
},
|
},
|
||||||
// 地图线的动画效果
|
// 地图线的动画效果
|
||||||
{
|
{
|
||||||
@@ -254,17 +262,17 @@ const options = {
|
|||||||
period: 4, // 箭头指向速度,值越小速度越快
|
period: 4, // 箭头指向速度,值越小速度越快
|
||||||
trailLength: 0.02, // 特效尾迹长度[0,1]值越大,尾迹越长重
|
trailLength: 0.02, // 特效尾迹长度[0,1]值越大,尾迹越长重
|
||||||
symbol: 'arrow', // 箭头图标
|
symbol: 'arrow', // 箭头图标
|
||||||
symbolSize: 3 // 图标大小
|
symbolSize: 3, // 图标大小
|
||||||
},
|
},
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: colors,
|
color: colors,
|
||||||
width: 0.1, // 尾迹线条宽度
|
width: 0.1, // 尾迹线条宽度
|
||||||
opacity: 0.5, // 尾迹线条透明度
|
opacity: 0.5, // 尾迹线条透明度
|
||||||
curveness: 0.3 // 尾迹线条曲直度
|
curveness: 0.3, // 尾迹线条曲直度
|
||||||
}
|
|
||||||
},
|
},
|
||||||
data: convertToLineData(mapData, geoGpsMap)
|
},
|
||||||
|
data: convertToLineData(mapData, geoGpsMap),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'scatter',
|
type: 'scatter',
|
||||||
@@ -274,7 +282,9 @@ const options = {
|
|||||||
symbol: `image://${logo}`,
|
symbol: `image://${logo}`,
|
||||||
data: cityIconData,
|
data: cityIconData,
|
||||||
rippleEffect: {
|
rippleEffect: {
|
||||||
period: 4, brushType: 'stroke', scale: 4
|
period: 4,
|
||||||
|
brushType: 'stroke',
|
||||||
|
scale: 4,
|
||||||
},
|
},
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'item',
|
trigger: 'item',
|
||||||
@@ -282,7 +292,7 @@ const options = {
|
|||||||
borderColor: 'black',
|
borderColor: 'black',
|
||||||
background: 'rgba(0,0,0,0.7)',
|
background: 'rgba(0,0,0,0.7)',
|
||||||
textStyle: {
|
textStyle: {
|
||||||
fontSize:20
|
fontSize: 20,
|
||||||
},
|
},
|
||||||
formatter(val) {
|
formatter(val) {
|
||||||
console.log('val=======', val)
|
console.log('val=======', val)
|
||||||
@@ -297,10 +307,10 @@ const options = {
|
|||||||
<!-- </div>-->
|
<!-- </div>-->
|
||||||
</div>`
|
</div>`
|
||||||
return tipHtml
|
return tipHtml
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
]
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
let chart: EChartsType
|
let chart: EChartsType
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
|
|||||||
@@ -3,31 +3,31 @@
|
|||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import 'echarts-liquidfill/src/liquidFill.js'
|
import 'echarts-liquidfill/src/liquidFill.js'
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const options = {
|
const options = {
|
||||||
legend: {
|
legend: {
|
||||||
@@ -38,12 +38,12 @@ const options = {
|
|||||||
'60岁全程接种量',
|
'60岁全程接种量',
|
||||||
'80岁任务数',
|
'80岁任务数',
|
||||||
'80岁全程接种量',
|
'80岁全程接种量',
|
||||||
'完成率'
|
'完成率',
|
||||||
]
|
],
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: ['街道1', '街道2', '街道3', '街道4', '街道5', '街道6', '街道7']
|
data: ['街道1', '街道2', '街道3', '街道4', '街道5', '街道6', '街道7'],
|
||||||
},
|
},
|
||||||
yAxis: [
|
yAxis: [
|
||||||
{ type: 'value' },
|
{ type: 'value' },
|
||||||
@@ -54,7 +54,7 @@ const options = {
|
|||||||
// max: 100,
|
// max: 100,
|
||||||
nameTextStyle: {
|
nameTextStyle: {
|
||||||
color: '#ccc',
|
color: '#ccc',
|
||||||
padding: [0, 0, 10, -30]
|
padding: [0, 0, 10, -30],
|
||||||
},
|
},
|
||||||
splitNumber: 5,
|
splitNumber: 5,
|
||||||
splitLine: {
|
splitLine: {
|
||||||
@@ -63,16 +63,16 @@ const options = {
|
|||||||
type: 'dashed',
|
type: 'dashed',
|
||||||
width: 1,
|
width: 1,
|
||||||
// 使用深浅的间隔色
|
// 使用深浅的间隔色
|
||||||
color: ['#566471', '#566471']
|
color: ['#566471', '#566471'],
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
axisLabel: {
|
axisLabel: {
|
||||||
show: true,
|
show: true,
|
||||||
textStyle: {
|
textStyle: {
|
||||||
fontSize: 12
|
fontSize: 12,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
// tooltip: {
|
// tooltip: {
|
||||||
// trigger: 'axis',
|
// trigger: 'axis',
|
||||||
@@ -81,56 +81,60 @@ const options = {
|
|||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
axisPointer: {
|
axisPointer: {
|
||||||
type: 'shadow'
|
type: 'shadow',
|
||||||
},
|
},
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#fff',
|
color: '#fff',
|
||||||
align: 'left',
|
align: 'left',
|
||||||
fontSize: 14
|
fontSize: 14,
|
||||||
},
|
},
|
||||||
axisLine: {//x坐标轴轴线
|
axisLine: {
|
||||||
|
//x坐标轴轴线
|
||||||
show: true,
|
show: true,
|
||||||
lineStyle: {//x坐标轴轴线样式
|
lineStyle: {
|
||||||
|
//x坐标轴轴线样式
|
||||||
color: '#000', //'#ccc' | 'rgb(128, 128, 128)' | 'rgba(128, 128, 128, 0.5)',设置标签颜色
|
color: '#000', //'#ccc' | 'rgb(128, 128, 128)' | 'rgba(128, 128, 128, 0.5)',设置标签颜色
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
backgroundColor: 'rgba(0,0,0,0.8)',
|
backgroundColor: 'rgba(0,0,0,0.8)',
|
||||||
formatter: function (params) {
|
formatter: function (params) {
|
||||||
console.log(params);
|
console.log(params)
|
||||||
let str = params[0].name + '<br />';
|
let str = params[0].name + '<br />'
|
||||||
console.log(str);
|
console.log(str)
|
||||||
params.forEach((item) => {
|
params.forEach((item) => {
|
||||||
console.log(item.seriesName);
|
console.log(item.seriesName)
|
||||||
if (item.value) {
|
if (item.value) {
|
||||||
if (item.seriesName.indexOf('岁全程接种量') != -1) {
|
if (item.seriesName.indexOf('岁全程接种量') != -1) {
|
||||||
str += `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color: ${item.color}
|
str += `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color: ${
|
||||||
|
item.color
|
||||||
|
}
|
||||||
"></span>
|
"></span>
|
||||||
${item.seriesName}
|
${item.seriesName}
|
||||||
:
|
:
|
||||||
${item.value}人 <br/>
|
${item.value}人 <br/>
|
||||||
全程完成率
|
全程完成率
|
||||||
: ${item.value / 100}%
|
: ${item.value / 100}%
|
||||||
<br/><br/>`;
|
<br/><br/>`
|
||||||
} else if (item.seriesName.indexOf('岁任务数') != -1) {
|
} else if (item.seriesName.indexOf('岁任务数') != -1) {
|
||||||
str += `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color: ${item.color}
|
str += `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color: ${item.color}
|
||||||
"></span>
|
"></span>
|
||||||
${item.seriesName}
|
${item.seriesName}
|
||||||
:
|
:
|
||||||
${item.value}人
|
${item.value}人
|
||||||
<br/>`;
|
<br/>`
|
||||||
} else {
|
} else {
|
||||||
str += `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color: ${item.color}
|
str += `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color: ${item.color}
|
||||||
"></span>
|
"></span>
|
||||||
${item.seriesName}
|
${item.seriesName}
|
||||||
:
|
:
|
||||||
${item.value}%
|
${item.value}%
|
||||||
<br/>`;
|
<br/>`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
return str;
|
return str
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
series: [
|
series: [
|
||||||
@@ -138,37 +142,37 @@ const options = {
|
|||||||
name: '3-11岁任务数',
|
name: '3-11岁任务数',
|
||||||
data: [150, 230, 224, 218, 135, 147, 260],
|
data: [150, 230, 224, 218, 135, 147, 260],
|
||||||
stack: 'BB',
|
stack: 'BB',
|
||||||
type: 'bar'
|
type: 'bar',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '3-11岁全程接种量',
|
name: '3-11岁全程接种量',
|
||||||
data: [150, 230, 224, 218, 135, 147, 260],
|
data: [150, 230, 224, 218, 135, 147, 260],
|
||||||
stack: 'BB',
|
stack: 'BB',
|
||||||
type: 'bar'
|
type: 'bar',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '60岁任务数',
|
name: '60岁任务数',
|
||||||
data: [150, 230, 224, 218, 135, 147, 260],
|
data: [150, 230, 224, 218, 135, 147, 260],
|
||||||
stack: 'AA',
|
stack: 'AA',
|
||||||
type: 'bar'
|
type: 'bar',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '60岁全程接种量',
|
name: '60岁全程接种量',
|
||||||
data: [880, 30, 124, 118, 35, 47, 160],
|
data: [880, 30, 124, 118, 35, 47, 160],
|
||||||
stack: 'AA',
|
stack: 'AA',
|
||||||
type: 'bar'
|
type: 'bar',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '80岁任务数',
|
name: '80岁任务数',
|
||||||
data: [660, 30, 124, 118, 35, 47, 160],
|
data: [660, 30, 124, 118, 35, 47, 160],
|
||||||
stack: 'Ad',
|
stack: 'Ad',
|
||||||
type: 'bar'
|
type: 'bar',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '80岁全程接种量',
|
name: '80岁全程接种量',
|
||||||
data: [880, 30, 124, 118, 35, 47, 160],
|
data: [880, 30, 124, 118, 35, 47, 160],
|
||||||
stack: 'Ad',
|
stack: 'Ad',
|
||||||
type: 'bar'
|
type: 'bar',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '完成率',
|
name: '完成率',
|
||||||
@@ -180,25 +184,25 @@ const options = {
|
|||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
type: 'dotted'
|
type: 'dotted',
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
data: [{ type: 'average', name: 'Avg' + '%' }]
|
},
|
||||||
|
},
|
||||||
|
data: [{ type: 'average', name: 'Avg' + '%' }],
|
||||||
},
|
},
|
||||||
// symbol: 'none',
|
// symbol: 'none',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
width: 2,
|
width: 2,
|
||||||
type: 'solid' //'dotted'虚线 'solid'实线
|
type: 'solid', //'dotted'虚线 'solid'实线
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
}
|
let chart: EChartsType
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
};
|
|
||||||
let chart:EChartsType;
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -209,6 +213,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -2,31 +2,31 @@
|
|||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const options = {
|
const options = {
|
||||||
backgroundColor: '#031d33',
|
backgroundColor: '#031d33',
|
||||||
@@ -37,8 +37,7 @@ const options = {
|
|||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
color: 'rgba(101, 213, 255, 1)',
|
color: 'rgba(101, 213, 255, 1)',
|
||||||
},
|
},
|
||||||
icon:
|
icon: 'path://M512 881.777778 512 881.777778C716.222629 881.777778 881.777778 716.222629 881.777778 512 881.777778 307.777371 716.222629 142.222222 512 142.222222 307.777373 142.222222 142.222222 307.777371 142.222222 512 142.222222 716.222629 307.777373 881.777778 512 881.777778L512 881.777778ZM512 1024 512 1024C229.230208 1024 0 794.769789 0 512 0 229.230211 229.230208 0 512 0 794.769789 0 1024 229.230211 1024 512 1024 794.769789 794.769789 1024 512 1024L512 1024Z',
|
||||||
'path://M512 881.777778 512 881.777778C716.222629 881.777778 881.777778 716.222629 881.777778 512 881.777778 307.777371 716.222629 142.222222 512 142.222222 307.777373 142.222222 142.222222 307.777371 142.222222 512 142.222222 716.222629 307.777373 881.777778 512 881.777778L512 881.777778ZM512 1024 512 1024C229.230208 1024 0 794.769789 0 512 0 229.230211 229.230208 0 512 0 794.769789 0 1024 229.230211 1024 512 1024 794.769789 794.769789 1024 512 1024L512 1024Z',
|
|
||||||
itemWidth: 8, // 设置宽度
|
itemWidth: 8, // 设置宽度
|
||||||
itemHeight: 8, // 设置高度、
|
itemHeight: 8, // 设置高度、
|
||||||
itemGap: 12, // 设置间距
|
itemGap: 12, // 设置间距
|
||||||
@@ -162,34 +161,34 @@ const options = {
|
|||||||
{
|
{
|
||||||
name: '',
|
name: '',
|
||||||
nameTextStyle: {
|
nameTextStyle: {
|
||||||
color: '#65d5ff'
|
color: '#65d5ff',
|
||||||
},
|
},
|
||||||
min: 0,
|
min: 0,
|
||||||
splitLine: {
|
splitLine: {
|
||||||
show: true,
|
show: true,
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#233653'
|
color: '#233653',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
axisLine: {
|
axisLine: {
|
||||||
show: true,
|
show: true,
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#233653'
|
color: '#233653',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
axisLabel: {
|
axisLabel: {
|
||||||
show: true,
|
show: true,
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#78bdf5'
|
color: '#78bdf5',
|
||||||
},
|
},
|
||||||
formatter: function (value) {
|
formatter: function (value) {
|
||||||
return value * 100 + '%'
|
return value * 100 + '%'
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false
|
show: false,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
@@ -308,21 +307,25 @@ const options = {
|
|||||||
symbol: 'none',
|
symbol: 'none',
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||||
|
{
|
||||||
offset: 0,
|
offset: 0,
|
||||||
color: 'rgba(255, 227, 168, 0.3)'
|
color: 'rgba(255, 227, 168, 0.3)',
|
||||||
}, {
|
|
||||||
offset: 0.5,
|
|
||||||
color: 'rgba(255, 227, 168, 1)'
|
|
||||||
}, {
|
|
||||||
offset: 1,
|
|
||||||
color: 'rgba(255, 227, 168, 0.3)'
|
|
||||||
}]),
|
|
||||||
shadowColor: 'rgba(255, 120, 0,1)',
|
|
||||||
shadowBlur: 10
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
yAxisIndex: 1
|
{
|
||||||
|
offset: 0.5,
|
||||||
|
color: 'rgba(255, 227, 168, 1)',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
offset: 1,
|
||||||
|
color: 'rgba(255, 227, 168, 0.3)',
|
||||||
|
},
|
||||||
|
]),
|
||||||
|
shadowColor: 'rgba(255, 120, 0,1)',
|
||||||
|
shadowBlur: 10,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
yAxisIndex: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '变化占比',
|
name: '变化占比',
|
||||||
@@ -332,21 +335,21 @@ const options = {
|
|||||||
rippleEffect: {
|
rippleEffect: {
|
||||||
period: 5,
|
period: 5,
|
||||||
scale: 3,
|
scale: 3,
|
||||||
brushType: 'stroke'
|
brushType: 'stroke',
|
||||||
},
|
},
|
||||||
hoverAnimation: true,
|
hoverAnimation: true,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: 'rgba(217,247,249,1)',
|
color: 'rgba(217,247,249,1)',
|
||||||
shadowBlur: 10,
|
shadowBlur: 10,
|
||||||
shadowColor: '#333'
|
shadowColor: '#333',
|
||||||
}
|
},
|
||||||
|
},
|
||||||
|
data: [],
|
||||||
},
|
},
|
||||||
data: []
|
|
||||||
}
|
|
||||||
],
|
],
|
||||||
};
|
}
|
||||||
let chart:EChartsType;
|
let chart: EChartsType
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -357,6 +360,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -3,31 +3,31 @@
|
|||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import 'echarts-liquidfill/src/liquidFill.js'
|
import 'echarts-liquidfill/src/liquidFill.js'
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const options = {
|
const options = {
|
||||||
grid: {
|
grid: {
|
||||||
@@ -35,7 +35,7 @@ const options = {
|
|||||||
left: '2%',
|
left: '2%',
|
||||||
right: '2%',
|
right: '2%',
|
||||||
bottom: '2%',
|
bottom: '2%',
|
||||||
containLabel: true
|
containLabel: true,
|
||||||
},
|
},
|
||||||
backgroundColor: '#0F224C', //背景色
|
backgroundColor: '#0F224C', //背景色
|
||||||
series: [
|
series: [
|
||||||
@@ -44,7 +44,7 @@ const options = {
|
|||||||
radius: '80%', //显示比例
|
radius: '80%', //显示比例
|
||||||
center: ['50%', '50%'], //中心点
|
center: ['50%', '50%'], //中心点
|
||||||
amplitude: 20, //水波振幅
|
amplitude: 20, //水波振幅
|
||||||
data: [0.5,.5,.5], // data个数代表波浪数
|
data: [0.5, 0.5, 0.5], // data个数代表波浪数
|
||||||
color: [
|
color: [
|
||||||
{
|
{
|
||||||
type: 'linear',
|
type: 'linear',
|
||||||
@@ -89,8 +89,8 @@ const options = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
}
|
||||||
let chart:EChartsType;
|
let chart: EChartsType
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -101,6 +101,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -2,59 +2,59 @@
|
|||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const color = ['#3c90ff', '#fff225', '#24ffdf', '#ff9c3c', '#7536ff']
|
const color = ['#3c90ff', '#fff225', '#24ffdf', '#ff9c3c', '#7536ff']
|
||||||
const indicator = [
|
const indicator = [
|
||||||
{
|
{
|
||||||
text: '文明村',
|
text: '文明村',
|
||||||
min: 0,
|
min: 0,
|
||||||
max: 100
|
max: 100,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: '卫生村',
|
text: '卫生村',
|
||||||
min: 0,
|
min: 0,
|
||||||
max: 100
|
max: 100,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: '森林村庄',
|
text: '森林村庄',
|
||||||
min: 0,
|
min: 0,
|
||||||
max: 100
|
max: 100,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: '全面小康',
|
text: '全面小康',
|
||||||
min: 0,
|
min: 0,
|
||||||
max: 100
|
max: 100,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: '景区村庄',
|
text: '景区村庄',
|
||||||
min: 0,
|
min: 0,
|
||||||
max: 100
|
max: 100,
|
||||||
}
|
},
|
||||||
]
|
]
|
||||||
const Data = [80, 61, 70, 86, 77]
|
const Data = [80, 61, 70, 86, 77]
|
||||||
function setData() {
|
function setData() {
|
||||||
@@ -66,11 +66,11 @@ function setData() {
|
|||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#4BFFFC',
|
color: '#4BFFFC',
|
||||||
shadowColor: '#4BFFFC',
|
shadowColor: '#4BFFFC',
|
||||||
shadowBlur: 5
|
shadowBlur: 5,
|
||||||
},
|
},
|
||||||
shadowColor: '#4BFFFC',
|
shadowColor: '#4BFFFC',
|
||||||
shadowBlur: 5
|
shadowBlur: 5,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
areaStyle: {
|
areaStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
@@ -83,19 +83,19 @@ function setData() {
|
|||||||
colorStops: [
|
colorStops: [
|
||||||
{
|
{
|
||||||
offset: 1,
|
offset: 1,
|
||||||
color: '#4BFFFC'
|
color: '#4BFFFC',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
offset: 0,
|
offset: 0,
|
||||||
color: 'rgba(0,0,0,0)'
|
color: 'rgba(0,0,0,0)',
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
globalCoord: false
|
globalCoord: false,
|
||||||
|
},
|
||||||
|
opacity: 0.8, // 区域透明度
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
opacity: 0.8 // 区域透明度
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,23 +109,23 @@ function setgauge(i) {
|
|||||||
startAngle: 90 + 72 * i + 18, //开始刻度的角度
|
startAngle: 90 + 72 * i + 18, //开始刻度的角度
|
||||||
endAngle: 90 + 72 * (i + 1) - 18, //结束刻度的角度
|
endAngle: 90 + 72 * (i + 1) - 18, //结束刻度的角度
|
||||||
axisLine: {
|
axisLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: true,
|
show: true,
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#66ccff',
|
color: '#66ccff',
|
||||||
width: 1
|
width: 1,
|
||||||
},
|
},
|
||||||
length: 6,
|
length: 6,
|
||||||
splitNumber: 1
|
splitNumber: 1,
|
||||||
},
|
},
|
||||||
splitLine: {
|
splitLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
axisLabel: {
|
axisLabel: {
|
||||||
show: false
|
show: false,
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function setSpot() {
|
function setSpot() {
|
||||||
@@ -139,9 +139,9 @@ function setSpot() {
|
|||||||
borderColor: '#fff',
|
borderColor: '#fff',
|
||||||
borderWidth: 1,
|
borderWidth: 1,
|
||||||
shadowColor: color[i],
|
shadowColor: color[i],
|
||||||
shadowBlur: 8
|
shadowBlur: 8,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
return scatterData
|
return scatterData
|
||||||
@@ -151,7 +151,7 @@ const options = {
|
|||||||
backgroundColor: '#0E1327',
|
backgroundColor: '#0E1327',
|
||||||
polar: {
|
polar: {
|
||||||
center: ['50%', '50%'],
|
center: ['50%', '50%'],
|
||||||
radius: '60%'
|
radius: '60%',
|
||||||
},
|
},
|
||||||
radar: {
|
radar: {
|
||||||
shape: 'circle',
|
shape: 'circle',
|
||||||
@@ -161,7 +161,7 @@ const options = {
|
|||||||
axisName: {
|
axisName: {
|
||||||
color: '#b7e9fd',
|
color: '#b7e9fd',
|
||||||
fontSize: 13,
|
fontSize: 13,
|
||||||
padding: -20
|
padding: -20,
|
||||||
},
|
},
|
||||||
nameGap: 45,
|
nameGap: 45,
|
||||||
splitNumber: 4,
|
splitNumber: 4,
|
||||||
@@ -170,21 +170,21 @@ const options = {
|
|||||||
show: true,
|
show: true,
|
||||||
areaStyle: {
|
areaStyle: {
|
||||||
// 分隔区域的样式设置。
|
// 分隔区域的样式设置。
|
||||||
color: ['rgba(27, 50, 66, 0.4)']
|
color: ['rgba(27, 50, 66, 0.4)'],
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
axisLine: {
|
axisLine: {
|
||||||
//指向外圈文本的分隔线样式
|
//指向外圈文本的分隔线样式
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#5aa3d0'
|
color: '#5aa3d0',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
splitLine: {
|
splitLine: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: 'rgba(99,192,251,0.2)', // 分隔线颜色
|
color: 'rgba(99,192,251,0.2)', // 分隔线颜色
|
||||||
width: 2 // 分隔线线宽
|
width: 2, // 分隔线线宽
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
angleAxis: {
|
angleAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
@@ -193,40 +193,40 @@ const options = {
|
|||||||
boundaryGap: false,
|
boundaryGap: false,
|
||||||
clockwise: false,
|
clockwise: false,
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
axisLabel: {
|
axisLabel: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
axisLine: {
|
axisLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
splitLine: {
|
splitLine: {
|
||||||
show: false
|
show: false,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
radiusAxis: {
|
radiusAxis: {
|
||||||
min: 0,
|
min: 0,
|
||||||
max: 100,
|
max: 100,
|
||||||
interval: 25,
|
interval: 25,
|
||||||
splitLine: {
|
splitLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
axisLine: {
|
axisLine: {
|
||||||
//指向外圈文本的分隔线样式
|
//指向外圈文本的分隔线样式
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#5aa3d0'
|
color: '#5aa3d0',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
axisLabel: {
|
axisLabel: {
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
color: '#5aa3d0',
|
color: '#5aa3d0',
|
||||||
align: 'left',
|
align: 'left',
|
||||||
margin: -5
|
margin: -5,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
setgauge(0),
|
setgauge(0),
|
||||||
@@ -238,22 +238,22 @@ const options = {
|
|||||||
type: 'radar',
|
type: 'radar',
|
||||||
silent: true,
|
silent: true,
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#66ffff'
|
color: '#66ffff',
|
||||||
},
|
},
|
||||||
areaStyle: {
|
areaStyle: {
|
||||||
color: 'rgba(102, 255, 255, 0.31)'
|
color: 'rgba(102, 255, 255, 0.31)',
|
||||||
},
|
},
|
||||||
data: setData()
|
data: setData(),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'scatter',
|
type: 'scatter',
|
||||||
coordinateSystem: 'polar',
|
coordinateSystem: 'polar',
|
||||||
symbolSize: 20,
|
symbolSize: 20,
|
||||||
data: setSpot()
|
data: setSpot(),
|
||||||
|
},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
]
|
let chart: EChartsType
|
||||||
};
|
|
||||||
let chart:EChartsType;
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -262,10 +262,8 @@ const initChart =()=> {
|
|||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
chart = initChart()
|
chart = initChart()
|
||||||
|
|
||||||
|
|
||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -2,33 +2,33 @@
|
|||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
let color = ['#0E7CE2', '#FF8352', '#E271DE', '#F8456B', '#00FFFF', '#4AEAB0'];
|
let color = ['#0E7CE2', '#FF8352', '#E271DE', '#F8456B', '#00FFFF', '#4AEAB0']
|
||||||
let echartData = [
|
let echartData = [
|
||||||
{
|
{
|
||||||
name: '设备1',
|
name: '设备1',
|
||||||
@@ -46,11 +46,11 @@ let echartData = [
|
|||||||
name: '设备4',
|
name: '设备4',
|
||||||
value: '1420',
|
value: '1420',
|
||||||
},
|
},
|
||||||
];
|
]
|
||||||
let formatNumber = function (num) {
|
let formatNumber = function (num) {
|
||||||
let reg = /(?=(\B)(\d{3})+$)/g;
|
let reg = /(?=(\B)(\d{3})+$)/g
|
||||||
return num.toString().replace(reg, ',');
|
return num.toString().replace(reg, ',')
|
||||||
};
|
}
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
backgroundColor: '#364686',
|
backgroundColor: '#364686',
|
||||||
@@ -123,7 +123,9 @@ const options = {
|
|||||||
label: {
|
label: {
|
||||||
normal: {
|
normal: {
|
||||||
formatter: (params) => {
|
formatter: (params) => {
|
||||||
return '{icon|●}{name|' + params.name + '}\n{value|' + formatNumber(params.value) + '}';
|
return (
|
||||||
|
'{icon|●}{name|' + params.name + '}\n{value|' + formatNumber(params.value) + '}'
|
||||||
|
)
|
||||||
},
|
},
|
||||||
padding: [0, -70, 30, -70],
|
padding: [0, -70, 30, -70],
|
||||||
rich: {
|
rich: {
|
||||||
@@ -183,8 +185,8 @@ const options = {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
}
|
||||||
let chart:EChartsType;
|
let chart: EChartsType
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -195,6 +197,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -2,34 +2,33 @@
|
|||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
title: [
|
title: [
|
||||||
{
|
{
|
||||||
@@ -132,8 +131,8 @@ const options = {
|
|||||||
data: [100],
|
data: [100],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
}
|
||||||
let chart:EChartsType;
|
let chart: EChartsType
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -144,6 +143,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,55 +1,72 @@
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
var data = [],data2=[];
|
var data = [],
|
||||||
|
data2 = []
|
||||||
var trafficWay = [
|
var trafficWay = [
|
||||||
{
|
{
|
||||||
name: '病假',
|
name: '病假',
|
||||||
value: 20
|
value: 20,
|
||||||
},{
|
},
|
||||||
|
{
|
||||||
name: '事假',
|
name: '事假',
|
||||||
value: 1
|
value: 1,
|
||||||
},{
|
},
|
||||||
|
{
|
||||||
name: '婚假',
|
name: '婚假',
|
||||||
value: 30
|
value: 30,
|
||||||
},{
|
},
|
||||||
|
{
|
||||||
name: '丧假',
|
name: '丧假',
|
||||||
value: 40
|
value: 40,
|
||||||
},{
|
},
|
||||||
|
{
|
||||||
name: '年休假',
|
name: '年休假',
|
||||||
value: 40
|
value: 40,
|
||||||
}];
|
},
|
||||||
var color=['#2A8BFD','#BAFF7F','#00FAC1','#00CAFF','#FDE056','#4ED33C','#FF8A26','#FF5252','#9689FF','#CB00FF']
|
]
|
||||||
|
var color = [
|
||||||
|
'#2A8BFD',
|
||||||
|
'#BAFF7F',
|
||||||
|
'#00FAC1',
|
||||||
|
'#00CAFF',
|
||||||
|
'#FDE056',
|
||||||
|
'#4ED33C',
|
||||||
|
'#FF8A26',
|
||||||
|
'#FF5252',
|
||||||
|
'#9689FF',
|
||||||
|
'#CB00FF',
|
||||||
|
]
|
||||||
for (var i = 0; i < trafficWay.length; i++) {
|
for (var i = 0; i < trafficWay.length; i++) {
|
||||||
data.push({
|
data.push(
|
||||||
|
{
|
||||||
value: trafficWay[i].value,
|
value: trafficWay[i].value,
|
||||||
name: trafficWay[i].name,
|
name: trafficWay[i].name,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
@@ -58,28 +75,30 @@ for (var i = 0; i < trafficWay.length; i++) {
|
|||||||
shadowBlur: 20,
|
shadowBlur: 20,
|
||||||
borderRadius: 20,
|
borderRadius: 20,
|
||||||
borderColor: color[i],
|
borderColor: color[i],
|
||||||
shadowColor: color[i]
|
shadowColor: color[i],
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}, {
|
},
|
||||||
|
{
|
||||||
value: 5,
|
value: 5,
|
||||||
name: '',
|
name: '',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
label: {
|
label: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
labelLine: {
|
labelLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
color: 'rgba(0, 0, 0, 0)',
|
color: 'rgba(0, 0, 0, 0)',
|
||||||
borderColor: 'rgba(0, 0, 0, 0)',
|
borderColor: 'rgba(0, 0, 0, 0)',
|
||||||
borderWidth: 0
|
borderWidth: 0,
|
||||||
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
});
|
)
|
||||||
data2.push({
|
data2.push(
|
||||||
|
{
|
||||||
value: trafficWay[i].value,
|
value: trafficWay[i].value,
|
||||||
name: trafficWay[i].name,
|
name: trafficWay[i].name,
|
||||||
},
|
},
|
||||||
@@ -89,26 +108,25 @@ for (var i = 0; i < trafficWay.length; i++) {
|
|||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
label: {
|
label: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
labelLine: {
|
labelLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
color: 'rgba(0, 0, 0, 0)',
|
color: 'rgba(0, 0, 0, 0)',
|
||||||
borderColor: 'rgba(0, 0, 0, 0)',
|
borderColor: 'rgba(0, 0, 0, 0)',
|
||||||
borderWidth: 0,
|
borderWidth: 0,
|
||||||
opacity:0.2
|
opacity: 0.2,
|
||||||
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
let angle = 0;//角度,用来做简单的动画效果的
|
let angle = 0 //角度,用来做简单的动画效果的
|
||||||
|
|
||||||
const option = {
|
const option = {
|
||||||
backgroundColor:"#061740",
|
backgroundColor: '#061740',
|
||||||
color: color,
|
color: color,
|
||||||
legend: {
|
legend: {
|
||||||
right: '10%',
|
right: '10%',
|
||||||
@@ -118,204 +136,212 @@ const option = {
|
|||||||
itemHeight: 15,
|
itemHeight: 15,
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#ffffff',
|
color: '#ffffff',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{//外线1
|
{
|
||||||
name: "ring5",
|
//外线1
|
||||||
|
name: 'ring5',
|
||||||
type: 'custom',
|
type: 'custom',
|
||||||
coordinateSystem: "none",
|
coordinateSystem: 'none',
|
||||||
renderItem: function (params, api) {
|
renderItem: function (params, api) {
|
||||||
return {
|
return {
|
||||||
type: 'arc',
|
type: 'arc',
|
||||||
shape: {
|
shape: {
|
||||||
cx: api.getWidth() / 3,
|
cx: api.getWidth() / 3,
|
||||||
cy: api.getHeight() / 2,
|
cy: api.getHeight() / 2,
|
||||||
r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.6,
|
r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.6,
|
||||||
startAngle: (0+angle) * Math.PI / 180,
|
startAngle: ((0 + angle) * Math.PI) / 180,
|
||||||
endAngle: (90+angle) * Math.PI / 180
|
endAngle: ((90 + angle) * Math.PI) / 180,
|
||||||
},
|
},
|
||||||
style: {
|
style: {
|
||||||
stroke: '#4EE9E6',
|
stroke: '#4EE9E6',
|
||||||
fill: "transparent",
|
fill: 'transparent',
|
||||||
lineWidth: 1.5
|
lineWidth: 1.5,
|
||||||
},
|
},
|
||||||
silent: true
|
silent: true,
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
data: [0]
|
data: [0],
|
||||||
},
|
},
|
||||||
{//内线1
|
{
|
||||||
name: "ring5",
|
//内线1
|
||||||
|
name: 'ring5',
|
||||||
type: 'custom',
|
type: 'custom',
|
||||||
coordinateSystem: "none",
|
coordinateSystem: 'none',
|
||||||
renderItem: function (params, api) {
|
renderItem: function (params, api) {
|
||||||
return {
|
return {
|
||||||
type: 'arc',
|
type: 'arc',
|
||||||
shape: {
|
shape: {
|
||||||
cx: api.getWidth() / 3,
|
cx: api.getWidth() / 3,
|
||||||
cy: api.getHeight() / 2,
|
cy: api.getHeight() / 2,
|
||||||
r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.6,
|
r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.6,
|
||||||
startAngle: (180+angle) * Math.PI / 180,
|
startAngle: ((180 + angle) * Math.PI) / 180,
|
||||||
endAngle: (270+angle) * Math.PI / 180
|
endAngle: ((270 + angle) * Math.PI) / 180,
|
||||||
},
|
},
|
||||||
style: {
|
style: {
|
||||||
stroke: "#4EE9E6",
|
stroke: '#4EE9E6',
|
||||||
fill: "transparent",
|
fill: 'transparent',
|
||||||
lineWidth: 1.5
|
lineWidth: 1.5,
|
||||||
},
|
},
|
||||||
silent: true
|
silent: true,
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
data: [0]
|
data: [0],
|
||||||
},
|
},
|
||||||
{//外线2
|
{
|
||||||
name: "ring5",
|
//外线2
|
||||||
|
name: 'ring5',
|
||||||
type: 'custom',
|
type: 'custom',
|
||||||
coordinateSystem: "none",
|
coordinateSystem: 'none',
|
||||||
renderItem: function (params, api) {
|
renderItem: function (params, api) {
|
||||||
return {
|
return {
|
||||||
type: 'arc',
|
type: 'arc',
|
||||||
shape: {
|
shape: {
|
||||||
cx: api.getWidth() / 3,
|
cx: api.getWidth() / 3,
|
||||||
cy: api.getHeight() / 2,
|
cy: api.getHeight() / 2,
|
||||||
r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.65,
|
r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65,
|
||||||
startAngle: (270+-angle) * Math.PI / 180,
|
startAngle: ((270 + -angle) * Math.PI) / 180,
|
||||||
endAngle: (40+-angle) * Math.PI / 180
|
endAngle: ((40 + -angle) * Math.PI) / 180,
|
||||||
},
|
},
|
||||||
style: {
|
style: {
|
||||||
stroke: "#4EE9E6",
|
stroke: '#4EE9E6',
|
||||||
fill: "transparent",
|
fill: 'transparent',
|
||||||
lineWidth: 1.5
|
lineWidth: 1.5,
|
||||||
},
|
},
|
||||||
silent: true
|
silent: true,
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
data: [0]
|
data: [0],
|
||||||
},
|
},
|
||||||
{//外线2
|
{
|
||||||
name: "ring5",
|
//外线2
|
||||||
|
name: 'ring5',
|
||||||
type: 'custom',
|
type: 'custom',
|
||||||
coordinateSystem: "none",
|
coordinateSystem: 'none',
|
||||||
renderItem: function (params, api) {
|
renderItem: function (params, api) {
|
||||||
return {
|
return {
|
||||||
type: 'arc',
|
type: 'arc',
|
||||||
shape: {
|
shape: {
|
||||||
cx: api.getWidth() / 3,
|
cx: api.getWidth() / 3,
|
||||||
cy: api.getHeight() / 2,
|
cy: api.getHeight() / 2,
|
||||||
r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.65,
|
r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65,
|
||||||
startAngle: (90+-angle) * Math.PI / 180,
|
startAngle: ((90 + -angle) * Math.PI) / 180,
|
||||||
endAngle: (220+-angle) * Math.PI / 180
|
endAngle: ((220 + -angle) * Math.PI) / 180,
|
||||||
},
|
},
|
||||||
style: {
|
style: {
|
||||||
stroke: "#4EE9E6",
|
stroke: '#4EE9E6',
|
||||||
fill: "transparent",
|
fill: 'transparent',
|
||||||
lineWidth: 1.5
|
lineWidth: 1.5,
|
||||||
},
|
},
|
||||||
silent: true
|
silent: true,
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
data: [0]
|
data: [0],
|
||||||
},
|
},
|
||||||
{//绿点1
|
{
|
||||||
name: "ring5",
|
//绿点1
|
||||||
|
name: 'ring5',
|
||||||
type: 'custom',
|
type: 'custom',
|
||||||
coordinateSystem: "none",
|
coordinateSystem: 'none',
|
||||||
renderItem: function (params, api) {
|
renderItem: function (params, api) {
|
||||||
let x0 = api.getWidth() / 3;
|
let x0 = api.getWidth() / 3
|
||||||
let y0 = api.getHeight() / 2;
|
let y0 = api.getHeight() / 2
|
||||||
let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.65;
|
let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65
|
||||||
let point = getCirlPoint(x0, y0, r, (90+-angle))
|
let point = getCirlPoint(x0, y0, r, 90 + -angle)
|
||||||
return {
|
return {
|
||||||
type: 'circle',
|
type: 'circle',
|
||||||
shape: {
|
shape: {
|
||||||
cx: point.x,
|
cx: point.x,
|
||||||
cy: point.y,
|
cy: point.y,
|
||||||
r: 4
|
r: 4,
|
||||||
},
|
},
|
||||||
style: {
|
style: {
|
||||||
stroke: "#66FFFF",//粉
|
stroke: '#66FFFF', //粉
|
||||||
fill: "#66FFFF"
|
fill: '#66FFFF',
|
||||||
},
|
},
|
||||||
silent: true
|
silent: true,
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
data: [0]
|
data: [0],
|
||||||
},
|
},
|
||||||
{//绿点2
|
{
|
||||||
name: "ring5", //绿点
|
//绿点2
|
||||||
|
name: 'ring5', //绿点
|
||||||
type: 'custom',
|
type: 'custom',
|
||||||
coordinateSystem: "none",
|
coordinateSystem: 'none',
|
||||||
renderItem: function (params, api) {
|
renderItem: function (params, api) {
|
||||||
let x0 = api.getWidth() / 3;
|
let x0 = api.getWidth() / 3
|
||||||
let y0 = api.getHeight() / 2;
|
let y0 = api.getHeight() / 2
|
||||||
let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.65;
|
let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65
|
||||||
let point = getCirlPoint(x0, y0, r, (270+-angle))
|
let point = getCirlPoint(x0, y0, r, 270 + -angle)
|
||||||
return {
|
return {
|
||||||
type: 'circle',
|
type: 'circle',
|
||||||
shape: {
|
shape: {
|
||||||
cx: point.x,
|
cx: point.x,
|
||||||
cy: point.y,
|
cy: point.y,
|
||||||
r: 4
|
r: 4,
|
||||||
},
|
},
|
||||||
style: {
|
style: {
|
||||||
stroke: "#66FFFF",//粉
|
stroke: '#66FFFF', //粉
|
||||||
fill: "#66FFFF"
|
fill: '#66FFFF',
|
||||||
},
|
},
|
||||||
silent: true
|
silent: true,
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
data: [0]
|
data: [0],
|
||||||
},
|
},
|
||||||
{//绿点3
|
{
|
||||||
name: "ring5",
|
//绿点3
|
||||||
|
name: 'ring5',
|
||||||
type: 'custom',
|
type: 'custom',
|
||||||
coordinateSystem: "none",
|
coordinateSystem: 'none',
|
||||||
renderItem: function (params, api) {
|
renderItem: function (params, api) {
|
||||||
let x0 = api.getWidth() / 3;
|
let x0 = api.getWidth() / 3
|
||||||
let y0 = api.getHeight() / 2;
|
let y0 = api.getHeight() / 2
|
||||||
let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.6;
|
let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.6
|
||||||
let point = getCirlPoint(x0, y0, r, (90+angle))
|
let point = getCirlPoint(x0, y0, r, 90 + angle)
|
||||||
return {
|
return {
|
||||||
type: 'circle',
|
type: 'circle',
|
||||||
shape: {
|
shape: {
|
||||||
cx: point.x,
|
cx: point.x,
|
||||||
cy: point.y,
|
cy: point.y,
|
||||||
r: 4
|
r: 4,
|
||||||
},
|
},
|
||||||
style: {
|
style: {
|
||||||
stroke: "#66FFFF",//粉
|
stroke: '#66FFFF', //粉
|
||||||
fill: "#66FFFF"
|
fill: '#66FFFF',
|
||||||
},
|
},
|
||||||
silent: true
|
silent: true,
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
data: [0]
|
data: [0],
|
||||||
},
|
},
|
||||||
{//绿点4
|
{
|
||||||
name: "ring5", //绿点
|
//绿点4
|
||||||
|
name: 'ring5', //绿点
|
||||||
type: 'custom',
|
type: 'custom',
|
||||||
coordinateSystem: "none",
|
coordinateSystem: 'none',
|
||||||
renderItem: function (params, api) {
|
renderItem: function (params, api) {
|
||||||
let x0 = api.getWidth() / 3;
|
let x0 = api.getWidth() / 3
|
||||||
let y0 = api.getHeight() / 2;
|
let y0 = api.getHeight() / 2
|
||||||
let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.6;
|
let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.6
|
||||||
let point = getCirlPoint(x0, y0, r, (270+angle))
|
let point = getCirlPoint(x0, y0, r, 270 + angle)
|
||||||
return {
|
return {
|
||||||
type: 'circle',
|
type: 'circle',
|
||||||
shape: {
|
shape: {
|
||||||
cx: point.x,
|
cx: point.x,
|
||||||
cy: point.y,
|
cy: point.y,
|
||||||
r: 4
|
r: 4,
|
||||||
},
|
},
|
||||||
style: {
|
style: {
|
||||||
stroke: "#66FFFF",//粉
|
stroke: '#66FFFF', //粉
|
||||||
fill: "#66FFFF"
|
fill: '#66FFFF',
|
||||||
},
|
},
|
||||||
silent: true
|
silent: true,
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
data: [0]
|
data: [0],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '',
|
name: '',
|
||||||
@@ -324,19 +350,19 @@ const option = {
|
|||||||
radius: ['98%', '95%'],
|
radius: ['98%', '95%'],
|
||||||
hoverAnimation: false,
|
hoverAnimation: false,
|
||||||
center: ['33.33%', '50%'],
|
center: ['33.33%', '50%'],
|
||||||
top:"center",
|
top: 'center',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
label: {
|
label: {
|
||||||
show:false
|
show: false,
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
data:data
|
},
|
||||||
|
},
|
||||||
|
data: data,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'pie',
|
type: 'pie',
|
||||||
top:"center",
|
top: 'center',
|
||||||
startAngle: 90,
|
startAngle: 90,
|
||||||
clockwise: false,
|
clockwise: false,
|
||||||
center: ['33.33%', '50%'],
|
center: ['33.33%', '50%'],
|
||||||
@@ -344,16 +370,16 @@ const option = {
|
|||||||
hoverAnimation: false,
|
hoverAnimation: false,
|
||||||
radius: ['94%', '55%'],
|
radius: ['94%', '55%'],
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
opacity:0.15
|
opacity: 0.15,
|
||||||
},
|
},
|
||||||
label: {
|
label: {
|
||||||
show: false,
|
show: false,
|
||||||
position: 'center'
|
position: 'center',
|
||||||
},
|
},
|
||||||
labelLine: {
|
labelLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
data:data2
|
data: data2,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '',
|
name: '',
|
||||||
@@ -362,30 +388,29 @@ const option = {
|
|||||||
center: ['33.33%', '50%'],
|
center: ['33.33%', '50%'],
|
||||||
radius: ['39%', '38%'],
|
radius: ['39%', '38%'],
|
||||||
hoverAnimation: false,
|
hoverAnimation: false,
|
||||||
top:"center",
|
top: 'center',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
label: {
|
label: {
|
||||||
show:false
|
show: false,
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
data:data
|
|
||||||
},
|
},
|
||||||
]
|
},
|
||||||
};
|
data: data,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
//获取圆上面某点的坐标(x0,y0表示坐标,r半径,angle角度)
|
//获取圆上面某点的坐标(x0,y0表示坐标,r半径,angle角度)
|
||||||
function getCirlPoint(x0, y0, r, angle) {
|
function getCirlPoint(x0, y0, r, angle) {
|
||||||
let x1 = x0 + r * Math.cos(angle * Math.PI / 180)
|
let x1 = x0 + r * Math.cos((angle * Math.PI) / 180)
|
||||||
let y1 = y0 + r * Math.sin(angle * Math.PI / 180)
|
let y1 = y0 + r * Math.sin((angle * Math.PI) / 180)
|
||||||
return {
|
return {
|
||||||
x: x1,
|
x: x1,
|
||||||
y: y1
|
y: y1,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let chart: EChartsType
|
||||||
let chart:EChartsType;
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
draw(chart)
|
draw(chart)
|
||||||
@@ -403,11 +428,10 @@ onMounted(()=>{
|
|||||||
setInterval(function () {
|
setInterval(function () {
|
||||||
//用setInterval做动画感觉有问题
|
//用setInterval做动画感觉有问题
|
||||||
draw(chart)
|
draw(chart)
|
||||||
}, 100);
|
}, 100)
|
||||||
|
|
||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -2,230 +2,229 @@
|
|||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
let datalist = [
|
let datalist = [
|
||||||
{
|
{
|
||||||
name: "公共平台"
|
name: '公共平台',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统0000"
|
name: '系统0000',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统0011"
|
name: '系统0011',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统0022"
|
name: '系统0022',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统0033"
|
name: '系统0033',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统0044"
|
name: '系统0044',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统0055"
|
name: '系统0055',
|
||||||
},{
|
|
||||||
name: "系统11"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统22"
|
name: '系统11',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统33"
|
name: '系统22',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统44"
|
name: '系统33',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统55"
|
name: '系统44',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统66"
|
name: '系统55',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统77"
|
name: '系统66',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统88"
|
name: '系统77',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "系统99"
|
name: '系统88',
|
||||||
}
|
},
|
||||||
];
|
{
|
||||||
|
name: '系统99',
|
||||||
|
},
|
||||||
|
]
|
||||||
let linksData = [
|
let linksData = [
|
||||||
{
|
{
|
||||||
source: "公共平台",
|
source: '公共平台',
|
||||||
target: "系统0000",
|
target: '系统0000',
|
||||||
value: 1044305
|
value: 1044305,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "公共平台",
|
source: '公共平台',
|
||||||
target: "系统0011",
|
target: '系统0011',
|
||||||
value: 651527
|
value: 651527,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "公共平台",
|
source: '公共平台',
|
||||||
target: "系统0022",
|
target: '系统0022',
|
||||||
value: 651527
|
value: 651527,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "公共平台",
|
source: '公共平台',
|
||||||
target: "系统0033",
|
target: '系统0033',
|
||||||
value: 486710
|
value: 486710,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "公共平台",
|
source: '公共平台',
|
||||||
target: "系统0044",
|
target: '系统0044',
|
||||||
value: 212670
|
value: 212670,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "公共平台",
|
source: '公共平台',
|
||||||
target: "系统0055",
|
target: '系统0055',
|
||||||
value: 210400
|
value: 210400,
|
||||||
},{
|
|
||||||
source: "系统0011",
|
|
||||||
target: "系统11",
|
|
||||||
value: 645246
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "系统0022",
|
source: '系统0011',
|
||||||
target: "系统22",
|
target: '系统11',
|
||||||
value: 513275
|
value: 645246,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "系统0011",
|
source: '系统0022',
|
||||||
target: "系统33",
|
target: '系统22',
|
||||||
value: 282986
|
value: 513275,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "系统0011",
|
source: '系统0011',
|
||||||
target: "系统44",
|
target: '系统33',
|
||||||
value: 118655
|
value: 282986,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "系统0022",
|
source: '系统0011',
|
||||||
target: "系统55",
|
target: '系统44',
|
||||||
value: 105989
|
value: 118655,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "系统0022",
|
source: '系统0022',
|
||||||
target: "系统66",
|
target: '系统55',
|
||||||
value: 95100
|
value: 105989,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "系统0033",
|
source: '系统0022',
|
||||||
target: "系统77",
|
target: '系统66',
|
||||||
value: 87796
|
value: 95100,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "系统0044",
|
source: '系统0033',
|
||||||
target: "系统88",
|
target: '系统77',
|
||||||
value: 47658
|
value: 87796,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: "系统0055",
|
source: '系统0044',
|
||||||
target: "系统99",
|
target: '系统88',
|
||||||
value: 243660
|
value: 47658,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
source: '系统0055',
|
||||||
];
|
target: '系统99',
|
||||||
|
value: 243660,
|
||||||
|
},
|
||||||
|
]
|
||||||
let Color = [
|
let Color = [
|
||||||
"#61FEFF",
|
'#61FEFF',
|
||||||
"#937FE6",
|
'#937FE6',
|
||||||
"#2B56D3",
|
'#2B56D3',
|
||||||
"#87E7AA",
|
'#87E7AA',
|
||||||
"#937FE6",
|
'#937FE6',
|
||||||
"#FF9B97",
|
'#FF9B97',
|
||||||
"#8f23f5",
|
'#8f23f5',
|
||||||
"#0576ea",
|
'#0576ea',
|
||||||
"#2cb8cf",
|
'#2cb8cf',
|
||||||
"#8A7EE0",
|
'#8A7EE0',
|
||||||
"#2cb8cf",
|
'#2cb8cf',
|
||||||
"#4e70f0",
|
'#4e70f0',
|
||||||
"#1fa3de",
|
'#1fa3de',
|
||||||
"#bbc951",
|
'#bbc951',
|
||||||
"#FFC14B",
|
'#FFC14B',
|
||||||
"#b785a6",
|
'#b785a6',
|
||||||
|
]
|
||||||
]; let Color1 = [
|
let Color1 = [
|
||||||
"#04E0F3",
|
'#04E0F3',
|
||||||
"#682EFC",
|
'#682EFC',
|
||||||
"#35A7FE",
|
'#35A7FE',
|
||||||
"#0DC09F",
|
'#0DC09F',
|
||||||
"#682EFC",
|
'#682EFC',
|
||||||
"#ED6663",
|
'#ED6663',
|
||||||
"#8f23f5",
|
'#8f23f5',
|
||||||
"#0576ea",
|
'#0576ea',
|
||||||
"#2cb8cf",
|
'#2cb8cf',
|
||||||
"#8A7EE0",
|
'#8A7EE0',
|
||||||
"#2cb8cf",
|
'#2cb8cf',
|
||||||
"#4e70f0",
|
'#4e70f0',
|
||||||
"#1fa3de",
|
'#1fa3de',
|
||||||
"#bbc951",
|
'#bbc951',
|
||||||
"#FFC14B",
|
'#FFC14B',
|
||||||
"#b785a6",
|
'#b785a6',
|
||||||
|
]
|
||||||
];
|
|
||||||
let sourceLabel = [
|
let sourceLabel = [
|
||||||
"right",
|
'right',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left",
|
'left',
|
||||||
"left"
|
'left',
|
||||||
];
|
]
|
||||||
let itemStyleColor = [];
|
let itemStyleColor = []
|
||||||
let labelSource = [];
|
let labelSource = []
|
||||||
for (let i = 0; i < datalist.length; i++) {
|
for (let i = 0; i < datalist.length; i++) {
|
||||||
datalist[i].label = {
|
datalist[i].label = {
|
||||||
normal: {
|
normal: {
|
||||||
position: sourceLabel[i]
|
position: sourceLabel[i],
|
||||||
|
},
|
||||||
}
|
}
|
||||||
};
|
labelSource.push(sourceLabel[i])
|
||||||
labelSource.push(sourceLabel[i]);
|
|
||||||
}
|
}
|
||||||
for (let d = 0; d < datalist.length; d++) {
|
for (let d = 0; d < datalist.length; d++) {
|
||||||
datalist[d].itemStyle = {
|
datalist[d].itemStyle = {
|
||||||
normal: {
|
normal: {
|
||||||
// color: Color[d]
|
// color: Color[d]
|
||||||
color: {
|
color: {
|
||||||
type: "linear",
|
type: 'linear',
|
||||||
x: 0,
|
x: 0,
|
||||||
y: 1,
|
y: 1,
|
||||||
x2: 0,
|
x2: 0,
|
||||||
@@ -242,57 +241,59 @@ for (let d = 0; d < datalist.length; d++) {
|
|||||||
],
|
],
|
||||||
global: false, // 缺省为 false
|
global: false, // 缺省为 false
|
||||||
},
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
};
|
itemStyleColor.push(datalist[d])
|
||||||
itemStyleColor.push(datalist[d]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
backgroundColor: "#031d7a",
|
backgroundColor: '#031d7a',
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: "item",
|
trigger: 'item',
|
||||||
triggerOn: "mousemove",
|
triggerOn: 'mousemove',
|
||||||
formatter: function (params) {
|
formatter: function (params) {
|
||||||
if (params.name == "公共平台") {
|
if (params.name == '公共平台') {
|
||||||
return " 公共平台 "
|
return ' 公共平台 '
|
||||||
} else {
|
} else {
|
||||||
let value = params.data.value;
|
let value = params.data.value
|
||||||
if (!value && value !== 0) return 0;
|
if (!value && value !== 0) return 0
|
||||||
let str = value.toString();
|
let str = value.toString()
|
||||||
let reg = str.indexOf(".") > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g;
|
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
|
||||||
if (params.data.source == "公共平台") {
|
if (params.data.source == '公共平台') {
|
||||||
return params.data.target + " : " + str.replace(reg, "$1,");
|
return params.data.target + ' : ' + str.replace(reg, '$1,')
|
||||||
} else {
|
} else {
|
||||||
return params.data.source + " : " + str.replace(reg, "$1,");
|
return params.data.source + ' : ' + str.replace(reg, '$1,')
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
series: [{
|
},
|
||||||
type: "sankey",
|
series: [
|
||||||
layout: "none",
|
{
|
||||||
top: "4%",
|
type: 'sankey',
|
||||||
bottom: "12%",
|
layout: 'none',
|
||||||
left: "20",
|
top: '4%',
|
||||||
right: "20",
|
bottom: '12%',
|
||||||
|
left: '20',
|
||||||
|
right: '20',
|
||||||
nodeGap: 15,
|
nodeGap: 15,
|
||||||
nodeWidth: 25,
|
nodeWidth: 25,
|
||||||
focusNodeAdjacency: "allEdges",
|
focusNodeAdjacency: 'allEdges',
|
||||||
data: itemStyleColor,
|
data: itemStyleColor,
|
||||||
links: linksData,
|
links: linksData,
|
||||||
label: {
|
label: {
|
||||||
normal: {
|
normal: {
|
||||||
color: "#fff",
|
color: '#fff',
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
formatter: function (params) {
|
formatter: function (params) {
|
||||||
if (params.data.name == '公共平台') {
|
if (params.data.name == '公共平台') {
|
||||||
let strs = params.data.name.split(''); //字符串数组
|
let strs = params.data.name.split('') //字符串数组
|
||||||
let str = ''
|
let str = ''
|
||||||
for (let i = 0, s; s = strs[i++];) { //遍历字符串数组
|
for (let i = 0, s; (s = strs[i++]); ) {
|
||||||
str += s;
|
//遍历字符串数组
|
||||||
if (!(i % 1)) str += '\n'; //按需要求余
|
str += s
|
||||||
|
if (!(i % 1)) str += '\n' //按需要求余
|
||||||
}
|
}
|
||||||
return "{white|" + str + "}"
|
return '{white|' + str + '}'
|
||||||
} else {
|
} else {
|
||||||
return params.data.name
|
return params.data.name
|
||||||
}
|
}
|
||||||
@@ -301,27 +302,28 @@ const options = {
|
|||||||
white: {
|
white: {
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
lineHeight: 30,
|
lineHeight: 30,
|
||||||
padding: [0, 0, 0, -26]
|
padding: [0, 0, 0, -26],
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
opacity: 0.4,
|
opacity: 0.4,
|
||||||
color: "source",
|
color: 'source',
|
||||||
curveness: 0.5
|
curveness: 0.5,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
borderWidth: 1,
|
borderWidth: 1,
|
||||||
borderColor: "transparent"
|
borderColor: 'transparent',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
}
|
let chart: EChartsType
|
||||||
}]
|
|
||||||
};
|
|
||||||
let chart:EChartsType;
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -332,6 +334,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -2,31 +2,31 @@
|
|||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const options = {
|
const options = {
|
||||||
grid: {
|
grid: {
|
||||||
@@ -34,23 +34,23 @@ const options = {
|
|||||||
left: '2%',
|
left: '2%',
|
||||||
right: '2%',
|
right: '2%',
|
||||||
bottom: '2%',
|
bottom: '2%',
|
||||||
containLabel: true
|
containLabel: true,
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']
|
data: ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'],
|
||||||
},
|
},
|
||||||
yAxis: {
|
yAxis: {
|
||||||
type: 'value'
|
type: 'value',
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
data: [150, 230, 150, 80, 70, 110, 130],
|
data: [150, 230, 150, 80, 70, 110, 130],
|
||||||
type: 'bar'
|
type: 'bar',
|
||||||
|
},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
]
|
let chart: EChartsType
|
||||||
};
|
|
||||||
let chart:EChartsType;
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -61,6 +61,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -2,31 +2,31 @@
|
|||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const options = {
|
const options = {
|
||||||
grid: {
|
grid: {
|
||||||
@@ -34,10 +34,10 @@ const options = {
|
|||||||
left: '2%',
|
left: '2%',
|
||||||
right: '2%',
|
right: '2%',
|
||||||
bottom: '2%',
|
bottom: '2%',
|
||||||
containLabel: true
|
containLabel: true,
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
data: ['2017-10-24', '2017-10-25', '2017-10-26', '2017-10-27']
|
data: ['2017-10-24', '2017-10-25', '2017-10-26', '2017-10-27'],
|
||||||
},
|
},
|
||||||
yAxis: {},
|
yAxis: {},
|
||||||
series: [
|
series: [
|
||||||
@@ -47,12 +47,12 @@ const options = {
|
|||||||
[20, 34, 10, 38],
|
[20, 34, 10, 38],
|
||||||
[40, 35, 30, 50],
|
[40, 35, 30, 50],
|
||||||
[31, 38, 33, 44],
|
[31, 38, 33, 44],
|
||||||
[38, 15, 5, 42]
|
[38, 15, 5, 42],
|
||||||
]
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
]
|
let chart: EChartsType
|
||||||
};
|
|
||||||
let chart:EChartsType;
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -63,6 +63,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -2,31 +2,31 @@
|
|||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const options = {
|
const options = {
|
||||||
grid: {
|
grid: {
|
||||||
@@ -34,22 +34,22 @@ const options = {
|
|||||||
left: '2%',
|
left: '2%',
|
||||||
right: '2%',
|
right: '2%',
|
||||||
bottom: '0%',
|
bottom: '0%',
|
||||||
containLabel: true
|
containLabel: true,
|
||||||
},
|
},
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'item',
|
trigger: 'item',
|
||||||
formatter: '{a} <br/>{b} : {c}%'
|
formatter: '{a} <br/>{b} : {c}%',
|
||||||
},
|
},
|
||||||
toolbox: {
|
toolbox: {
|
||||||
feature: {
|
feature: {
|
||||||
dataView: { readOnly: false },
|
dataView: { readOnly: false },
|
||||||
restore: {},
|
restore: {},
|
||||||
saveAsImage: {}
|
saveAsImage: {},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
legend: {
|
legend: {
|
||||||
show: false,
|
show: false,
|
||||||
data: ['Show', 'Click', 'Visit', 'Inquiry', 'Order']
|
data: ['Show', 'Click', 'Visit', 'Inquiry', 'Order'],
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
@@ -67,35 +67,35 @@ const options = {
|
|||||||
gap: 2,
|
gap: 2,
|
||||||
label: {
|
label: {
|
||||||
show: true,
|
show: true,
|
||||||
position: 'inside'
|
position: 'inside',
|
||||||
},
|
},
|
||||||
labelLine: {
|
labelLine: {
|
||||||
length: 10,
|
length: 10,
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
width: 1,
|
width: 1,
|
||||||
type: 'solid'
|
type: 'solid',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
borderColor: '#fff',
|
borderColor: '#fff',
|
||||||
borderWidth: 1
|
borderWidth: 1,
|
||||||
},
|
},
|
||||||
emphasis: {
|
emphasis: {
|
||||||
label: {
|
label: {
|
||||||
fontSize: 20
|
fontSize: 20,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
data: [
|
data: [
|
||||||
{ value: 60, name: 'Visit' },
|
{ value: 60, name: 'Visit' },
|
||||||
{ value: 40, name: 'Inquiry' },
|
{ value: 40, name: 'Inquiry' },
|
||||||
{ value: 20, name: 'Order' },
|
{ value: 20, name: 'Order' },
|
||||||
{ value: 80, name: 'Click' },
|
{ value: 80, name: 'Click' },
|
||||||
{ value: 100, name: 'Show' }
|
{ value: 100, name: 'Show' },
|
||||||
]
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
]
|
let chart: EChartsType
|
||||||
};
|
|
||||||
let chart:EChartsType;
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -106,6 +106,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -2,54 +2,53 @@
|
|||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const options = {
|
const options = {
|
||||||
|
|
||||||
tooltip: {
|
tooltip: {
|
||||||
formatter: '{a} <br/>{b} : {c}%'
|
formatter: '{a} <br/>{b} : {c}%',
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
name: 'Pressure',
|
name: 'Pressure',
|
||||||
type: 'gauge',
|
type: 'gauge',
|
||||||
detail: {
|
detail: {
|
||||||
formatter: '{value}'
|
formatter: '{value}',
|
||||||
},
|
},
|
||||||
data: [
|
data: [
|
||||||
{
|
{
|
||||||
value: 50,
|
value: 50,
|
||||||
name: 'SCORE'
|
name: 'SCORE',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
]
|
let chart: EChartsType
|
||||||
}
|
|
||||||
]
|
|
||||||
};
|
|
||||||
let chart:EChartsType;
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -60,6 +59,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -2,59 +2,59 @@
|
|||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const axisData = ['Mon', 'Tue', 'Wed', 'Very Loooong Thu', 'Fri', 'Sat', 'Sun'];
|
const axisData = ['Mon', 'Tue', 'Wed', 'Very Loooong Thu', 'Fri', 'Sat', 'Sun']
|
||||||
const data = axisData.map(function (item, i) {
|
const data = axisData.map(function (item, i) {
|
||||||
return Math.round(Math.random() * 1000 * (i + 1));
|
return Math.round(Math.random() * 1000 * (i + 1))
|
||||||
});
|
})
|
||||||
const links = data.map(function (item, i) {
|
const links = data.map(function (item, i) {
|
||||||
return {
|
return {
|
||||||
source: i,
|
source: i,
|
||||||
target: i + 1
|
target: i + 1,
|
||||||
};
|
}
|
||||||
});
|
})
|
||||||
links.pop();
|
links.pop()
|
||||||
const options = {
|
const options = {
|
||||||
grid: {
|
grid: {
|
||||||
top: 10,
|
top: 10,
|
||||||
left: '2%',
|
left: '2%',
|
||||||
right: '2%',
|
right: '2%',
|
||||||
bottom: '2%',
|
bottom: '2%',
|
||||||
containLabel: true
|
containLabel: true,
|
||||||
},
|
},
|
||||||
tooltip: {},
|
tooltip: {},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
boundaryGap: false,
|
boundaryGap: false,
|
||||||
data: axisData
|
data: axisData,
|
||||||
},
|
},
|
||||||
yAxis: {
|
yAxis: {
|
||||||
type: 'value'
|
type: 'value',
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
@@ -63,19 +63,19 @@ const options = {
|
|||||||
coordinateSystem: 'cartesian2d',
|
coordinateSystem: 'cartesian2d',
|
||||||
symbolSize: 40,
|
symbolSize: 40,
|
||||||
label: {
|
label: {
|
||||||
show: true
|
show: true,
|
||||||
},
|
},
|
||||||
edgeSymbol: ['circle', 'arrow'],
|
edgeSymbol: ['circle', 'arrow'],
|
||||||
edgeSymbolSize: [4, 10],
|
edgeSymbolSize: [4, 10],
|
||||||
data: data,
|
data: data,
|
||||||
links: links,
|
links: links,
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#2f4554'
|
color: '#2f4554',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
}
|
let chart: EChartsType
|
||||||
]
|
|
||||||
};
|
|
||||||
let chart:EChartsType;
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -86,6 +86,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -10,32 +10,32 @@ const chartsRef = ref<HTMLElement|null>()
|
|||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
xAxisData: {
|
xAxisData: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
|
default: () => ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => {}
|
default: () => {},
|
||||||
},
|
},
|
||||||
seriesData: {
|
seriesData: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => [150, 230, 224, 218, 135, 147, 260]
|
default: () => [150, 230, 224, 218, 135, 147, 260],
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const options = {
|
const options = {
|
||||||
grid: {
|
grid: {
|
||||||
@@ -47,18 +47,18 @@ const options = {
|
|||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: props.xAxisData
|
data: props.xAxisData,
|
||||||
},
|
},
|
||||||
yAxis: {
|
yAxis: {
|
||||||
type: 'value'
|
type: 'value',
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
data: props.seriesData,
|
data: props.seriesData,
|
||||||
type: 'line'
|
type: 'line',
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
...props.config
|
...props.config,
|
||||||
}
|
}
|
||||||
let chart: EChartsType
|
let chart: EChartsType
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
@@ -74,6 +74,4 @@ onMounted(() => {
|
|||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style></style>
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|||||||
@@ -2,45 +2,43 @@
|
|||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
let category = [];
|
let category = []
|
||||||
let dottedBase = +new Date();
|
let dottedBase = +new Date()
|
||||||
let lineData = [];
|
let lineData = []
|
||||||
let barData = [];
|
let barData = []
|
||||||
|
|
||||||
for (let i = 0; i < 20; i++) {
|
for (let i = 0; i < 20; i++) {
|
||||||
let date = new Date((dottedBase += 3600 * 24 * 1000));
|
let date = new Date((dottedBase += 3600 * 24 * 1000))
|
||||||
category.push(
|
category.push([date.getFullYear(), date.getMonth() + 1, date.getDate()].join('-'))
|
||||||
[date.getFullYear(), date.getMonth() + 1, date.getDate()].join('-')
|
let b = Math.random() * 200
|
||||||
);
|
let d = Math.random() * 200
|
||||||
let b = Math.random() * 200;
|
barData.push(b)
|
||||||
let d = Math.random() * 200;
|
lineData.push(d + b)
|
||||||
barData.push(b);
|
|
||||||
lineData.push(d + b);
|
|
||||||
}
|
}
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const options = {
|
const options = {
|
||||||
grid: {
|
grid: {
|
||||||
@@ -48,36 +46,36 @@ const options = {
|
|||||||
left: '2%',
|
left: '2%',
|
||||||
right: '2%',
|
right: '2%',
|
||||||
bottom: '2%',
|
bottom: '2%',
|
||||||
containLabel: true
|
containLabel: true,
|
||||||
},
|
},
|
||||||
backgroundColor: '#0f375f',
|
backgroundColor: '#0f375f',
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
axisPointer: {
|
axisPointer: {
|
||||||
type: 'shadow'
|
type: 'shadow',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
legend: {
|
legend: {
|
||||||
data: ['line', 'bar'],
|
data: ['line', 'bar'],
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#ccc'
|
color: '#ccc',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
data: category,
|
data: category,
|
||||||
axisLine: {
|
axisLine: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#ccc'
|
color: '#ccc',
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
yAxis: {
|
yAxis: {
|
||||||
splitLine: { show: false },
|
splitLine: { show: false },
|
||||||
axisLine: {
|
axisLine: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#ccc'
|
color: '#ccc',
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
@@ -87,7 +85,7 @@ const options = {
|
|||||||
showAllSymbol: true,
|
showAllSymbol: true,
|
||||||
symbol: 'emptyCircle',
|
symbol: 'emptyCircle',
|
||||||
symbolSize: 15,
|
symbolSize: 15,
|
||||||
data: lineData
|
data: lineData,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'bar',
|
name: 'bar',
|
||||||
@@ -97,10 +95,10 @@ const options = {
|
|||||||
borderRadius: 5,
|
borderRadius: 5,
|
||||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||||
{ offset: 0, color: '#14c8d4' },
|
{ offset: 0, color: '#14c8d4' },
|
||||||
{ offset: 1, color: '#43eec6' }
|
{ offset: 1, color: '#43eec6' },
|
||||||
])
|
]),
|
||||||
},
|
},
|
||||||
data: barData
|
data: barData,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'line',
|
name: 'line',
|
||||||
@@ -111,28 +109,28 @@ const options = {
|
|||||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||||
{ offset: 0, color: 'rgba(20,200,212,0.5)' },
|
{ offset: 0, color: 'rgba(20,200,212,0.5)' },
|
||||||
{ offset: 0.2, color: 'rgba(20,200,212,0.2)' },
|
{ offset: 0.2, color: 'rgba(20,200,212,0.2)' },
|
||||||
{ offset: 1, color: 'rgba(20,200,212,0)' }
|
{ offset: 1, color: 'rgba(20,200,212,0)' },
|
||||||
])
|
]),
|
||||||
},
|
},
|
||||||
z: -12,
|
z: -12,
|
||||||
data: lineData
|
data: lineData,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'dotted',
|
name: 'dotted',
|
||||||
type: 'pictorialBar',
|
type: 'pictorialBar',
|
||||||
symbol: 'rect',
|
symbol: 'rect',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
color: '#0f375f'
|
color: '#0f375f',
|
||||||
},
|
},
|
||||||
symbolRepeat: true,
|
symbolRepeat: true,
|
||||||
symbolSize: [12, 4],
|
symbolSize: [12, 4],
|
||||||
symbolMargin: 1,
|
symbolMargin: 1,
|
||||||
z: -10,
|
z: -10,
|
||||||
data: lineData
|
data: lineData,
|
||||||
|
},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
]
|
let chart: EChartsType
|
||||||
};
|
|
||||||
let chart:EChartsType;
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -143,6 +141,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -2,31 +2,31 @@
|
|||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const options = {
|
const options = {
|
||||||
grid: {
|
grid: {
|
||||||
@@ -34,14 +34,14 @@ const options = {
|
|||||||
left: '2%',
|
left: '2%',
|
||||||
right: '2%',
|
right: '2%',
|
||||||
bottom: '2%',
|
bottom: '2%',
|
||||||
containLabel: true
|
containLabel: true,
|
||||||
},
|
},
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'item'
|
trigger: 'item',
|
||||||
},
|
},
|
||||||
legend: {
|
legend: {
|
||||||
top: '0%',
|
top: '0%',
|
||||||
left: 'center'
|
left: 'center',
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
@@ -51,29 +51,29 @@ const options = {
|
|||||||
avoidLabelOverlap: false,
|
avoidLabelOverlap: false,
|
||||||
label: {
|
label: {
|
||||||
show: false,
|
show: false,
|
||||||
position: 'center'
|
position: 'center',
|
||||||
},
|
},
|
||||||
emphasis: {
|
emphasis: {
|
||||||
label: {
|
label: {
|
||||||
show: true,
|
show: true,
|
||||||
fontSize: '40',
|
fontSize: '40',
|
||||||
fontWeight: 'bold'
|
fontWeight: 'bold',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
labelLine: {
|
labelLine: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
data: [
|
data: [
|
||||||
{ value: 1048, name: 'Search Engine' },
|
{ value: 1048, name: 'Search Engine' },
|
||||||
{ value: 735, name: 'Direct' },
|
{ value: 735, name: 'Direct' },
|
||||||
{ value: 580, name: 'Email' },
|
{ value: 580, name: 'Email' },
|
||||||
{ value: 484, name: 'Union Ads' },
|
{ value: 484, name: 'Union Ads' },
|
||||||
{ value: 300, name: 'Video Ads' }
|
{ value: 300, name: 'Video Ads' },
|
||||||
]
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
]
|
let chart: EChartsType
|
||||||
};
|
|
||||||
let chart:EChartsType;
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -84,6 +84,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -2,31 +2,31 @@
|
|||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const dataBJ = [
|
const dataBJ = [
|
||||||
[55, 9, 56, 0.46, 18, 6, 1],
|
[55, 9, 56, 0.46, 18, 6, 1],
|
||||||
@@ -59,8 +59,8 @@ const dataBJ = [
|
|||||||
[160, 120, 186, 2.77, 91, 50, 28],
|
[160, 120, 186, 2.77, 91, 50, 28],
|
||||||
[134, 96, 165, 2.76, 83, 41, 29],
|
[134, 96, 165, 2.76, 83, 41, 29],
|
||||||
[52, 24, 60, 1.03, 50, 21, 30],
|
[52, 24, 60, 1.03, 50, 21, 30],
|
||||||
[46, 5, 49, 0.28, 10, 6, 31]
|
[46, 5, 49, 0.28, 10, 6, 31],
|
||||||
];
|
]
|
||||||
|
|
||||||
const dataGZ = [
|
const dataGZ = [
|
||||||
[26, 37, 27, 1.163, 27, 13, 1],
|
[26, 37, 27, 1.163, 27, 13, 1],
|
||||||
@@ -93,8 +93,8 @@ const dataGZ = [
|
|||||||
[56, 48, 68, 1.336, 37, 9, 28],
|
[56, 48, 68, 1.336, 37, 9, 28],
|
||||||
[82, 92, 174, 3.29, 0, 13, 29],
|
[82, 92, 174, 3.29, 0, 13, 29],
|
||||||
[106, 116, 188, 3.628, 101, 16, 30],
|
[106, 116, 188, 3.628, 101, 16, 30],
|
||||||
[118, 50, 0, 1.383, 76, 11, 31]
|
[118, 50, 0, 1.383, 76, 11, 31],
|
||||||
];
|
]
|
||||||
|
|
||||||
const dataSH = [
|
const dataSH = [
|
||||||
[91, 45, 125, 0.82, 34, 23, 1],
|
[91, 45, 125, 0.82, 34, 23, 1],
|
||||||
@@ -127,13 +127,13 @@ const dataSH = [
|
|||||||
[93, 68, 96, 1.05, 79, 29, 28],
|
[93, 68, 96, 1.05, 79, 29, 28],
|
||||||
[188, 143, 197, 1.66, 99, 51, 29],
|
[188, 143, 197, 1.66, 99, 51, 29],
|
||||||
[174, 131, 174, 1.55, 108, 50, 30],
|
[174, 131, 174, 1.55, 108, 50, 30],
|
||||||
[187, 143, 201, 1.39, 89, 53, 31]
|
[187, 143, 201, 1.39, 89, 53, 31],
|
||||||
];
|
]
|
||||||
|
|
||||||
const lineStyle = {
|
const lineStyle = {
|
||||||
width: 1,
|
width: 1,
|
||||||
opacity: 0.5
|
opacity: 0.5,
|
||||||
};
|
}
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
backgroundColor: '#161627',
|
backgroundColor: '#161627',
|
||||||
@@ -141,8 +141,8 @@ const options = {
|
|||||||
text: 'AQI - Radar',
|
text: 'AQI - Radar',
|
||||||
left: 'center',
|
left: 'center',
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#eee'
|
color: '#eee',
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
legend: {
|
legend: {
|
||||||
show: false,
|
show: false,
|
||||||
@@ -151,9 +151,9 @@ const options = {
|
|||||||
itemGap: 20,
|
itemGap: 20,
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#fff',
|
color: '#fff',
|
||||||
fontSize: 14
|
fontSize: 14,
|
||||||
},
|
},
|
||||||
selectedMode: 'single'
|
selectedMode: 'single',
|
||||||
},
|
},
|
||||||
radar: {
|
radar: {
|
||||||
indicator: [
|
indicator: [
|
||||||
@@ -162,12 +162,12 @@ const options = {
|
|||||||
{ name: 'PM10', max: 300, min: 1 },
|
{ name: 'PM10', max: 300, min: 1 },
|
||||||
{ name: 'CO', max: 5, min: 1 },
|
{ name: 'CO', max: 5, min: 1 },
|
||||||
{ name: 'NO2', max: 200, min: 1 },
|
{ name: 'NO2', max: 200, min: 1 },
|
||||||
{ name: 'SO2', max: 100,min:1 }
|
{ name: 'SO2', max: 100, min: 1 },
|
||||||
],
|
],
|
||||||
shape: 'circle',
|
shape: 'circle',
|
||||||
splitNumber: 5,
|
splitNumber: 5,
|
||||||
axisName: {
|
axisName: {
|
||||||
color: 'rgb(238, 197, 102)'
|
color: 'rgb(238, 197, 102)',
|
||||||
},
|
},
|
||||||
splitLine: {
|
splitLine: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
@@ -177,18 +177,18 @@ const options = {
|
|||||||
'rgba(238, 197, 102, 0.4)',
|
'rgba(238, 197, 102, 0.4)',
|
||||||
'rgba(238, 197, 102, 0.6)',
|
'rgba(238, 197, 102, 0.6)',
|
||||||
'rgba(238, 197, 102, 0.8)',
|
'rgba(238, 197, 102, 0.8)',
|
||||||
'rgba(238, 197, 102, 1)'
|
'rgba(238, 197, 102, 1)',
|
||||||
].reverse()
|
].reverse(),
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
splitArea: {
|
splitArea: {
|
||||||
show: false
|
show: false,
|
||||||
},
|
},
|
||||||
axisLine: {
|
axisLine: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: 'rgba(238, 197, 102, 0.5)'
|
color: 'rgba(238, 197, 102, 0.5)',
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
@@ -198,11 +198,11 @@ const options = {
|
|||||||
data: dataBJ,
|
data: dataBJ,
|
||||||
symbol: 'none',
|
symbol: 'none',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
color: '#F9713C'
|
color: '#F9713C',
|
||||||
},
|
},
|
||||||
areaStyle: {
|
areaStyle: {
|
||||||
opacity: 0.1
|
opacity: 0.1,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Shanghai',
|
name: 'Shanghai',
|
||||||
@@ -211,11 +211,11 @@ const options = {
|
|||||||
data: dataSH,
|
data: dataSH,
|
||||||
symbol: 'none',
|
symbol: 'none',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
color: '#B3E4A1'
|
color: '#B3E4A1',
|
||||||
},
|
},
|
||||||
areaStyle: {
|
areaStyle: {
|
||||||
opacity: 0.05
|
opacity: 0.05,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Guangzhou',
|
name: 'Guangzhou',
|
||||||
@@ -224,15 +224,15 @@ const options = {
|
|||||||
data: dataGZ,
|
data: dataGZ,
|
||||||
symbol: 'none',
|
symbol: 'none',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
color: 'rgb(238, 197, 102)'
|
color: 'rgb(238, 197, 102)',
|
||||||
},
|
},
|
||||||
areaStyle: {
|
areaStyle: {
|
||||||
opacity: 0.05
|
opacity: 0.05,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
}
|
let chart: EChartsType
|
||||||
]
|
|
||||||
};
|
|
||||||
let chart:EChartsType;
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -243,6 +243,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -2,31 +2,31 @@
|
|||||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as echarts from "echarts";
|
import * as echarts from 'echarts'
|
||||||
import {EChartsType} from "echarts/core";
|
import { EChartsType } from 'echarts/core'
|
||||||
import {onMounted} from "vue";
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
className: {
|
className: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: ()=>{}
|
default: () => {},
|
||||||
},
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'chart'
|
default: 'chart',
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '200px'
|
default: '200px',
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const options = {
|
const options = {
|
||||||
grid: {
|
grid: {
|
||||||
@@ -34,7 +34,7 @@ const options = {
|
|||||||
left: '2%',
|
left: '2%',
|
||||||
right: '2%',
|
right: '2%',
|
||||||
bottom: '2%',
|
bottom: '2%',
|
||||||
containLabel: true
|
containLabel: true,
|
||||||
},
|
},
|
||||||
xAxis: {},
|
xAxis: {},
|
||||||
yAxis: {},
|
yAxis: {},
|
||||||
@@ -63,13 +63,13 @@ const options = {
|
|||||||
[12.0, 6.26],
|
[12.0, 6.26],
|
||||||
[12.0, 8.84],
|
[12.0, 8.84],
|
||||||
[7.08, 5.82],
|
[7.08, 5.82],
|
||||||
[5.02, 5.68]
|
[5.02, 5.68],
|
||||||
|
],
|
||||||
|
type: 'scatter',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
type: 'scatter'
|
|
||||||
}
|
}
|
||||||
]
|
let chart: EChartsType
|
||||||
};
|
|
||||||
let chart:EChartsType;
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
let chart = echarts.init(document.getElementById(props.id))
|
let chart = echarts.init(document.getElementById(props.id))
|
||||||
chart.setOption(options)
|
chart.setOption(options)
|
||||||
@@ -80,6 +80,5 @@ onMounted(()=>{
|
|||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
chart && chart.resize()
|
chart && chart.resize()
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
|
||||||
import Chart from '@/components/Charts/LineMarker.vue'
|
import Chart from '@/components/Charts/LineMarker.vue'
|
||||||
|
|
||||||
// export default {
|
// export default {
|
||||||
@@ -21,4 +20,3 @@ import Chart from '@/components/Charts/LineMarker.vue'
|
|||||||
height: calc(100vh - 130px);
|
height: calc(100vh - 130px);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import MapCharts from './components/map/index.vue'
|
import MapCharts from './components/map/index.vue'
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import MigrationCharts from './components/migration/index.vue'
|
import MigrationCharts from './components/migration/index.vue'
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<u-container-layout style="width: 100%;">
|
<u-container-layout style="width: 100%">
|
||||||
<el-row class="row-bg" :gutter="10">
|
<el-row class="row-bg" :gutter="10">
|
||||||
<el-col :xs="24" :sm="12" :lg="8">
|
<el-col :xs="24" :sm="12" :lg="8">
|
||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
@@ -18,8 +18,8 @@
|
|||||||
<span>柱状图</span>
|
<span>柱状图</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<bar-charts height="200px" width="100%" id="bar"/>
|
<bar-charts height="200px" width="100%" id="bar" /> </el-card
|
||||||
</el-card></el-col>
|
></el-col>
|
||||||
<el-col :xs="24" :sm="12" :lg="8">
|
<el-col :xs="24" :sm="12" :lg="8">
|
||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<template #header>
|
<template #header>
|
||||||
@@ -102,9 +102,6 @@
|
|||||||
</el-card>
|
</el-card>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</u-container-layout>
|
</u-container-layout>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@@ -118,9 +115,7 @@
|
|||||||
import RadarCharts from './components/simple/radar.vue'
|
import RadarCharts from './components/simple/radar.vue'
|
||||||
import GraphCharts from './components/simple/graph.vue'
|
import GraphCharts from './components/simple/graph.vue'
|
||||||
import PictorialBarCharts from './components/simple/pictorialBar.vue'
|
import PictorialBarCharts from './components/simple/pictorialBar.vue'
|
||||||
import PictorialBar from "@/views/charts/components/simple/pictorialBar.vue";
|
import PictorialBar from '@/views/charts/components/simple/pictorialBar.vue'
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ export const chatData = [
|
|||||||
is_self: 0,
|
is_self: 0,
|
||||||
created_at: '2022-03-11',
|
created_at: '2022-03-11',
|
||||||
content: 'hello 你好呀!',
|
content: 'hello 你好呀!',
|
||||||
id:1
|
id: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
is_self: 1,
|
is_self: 1,
|
||||||
@@ -11,5 +11,5 @@ export const chatData = [
|
|||||||
content: 'hello 你好呀!',
|
content: 'hello 你好呀!',
|
||||||
id: 2,
|
id: 2,
|
||||||
type: 1, // 文字
|
type: 1, // 文字
|
||||||
}
|
},
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="g-container-chat">
|
<div class="g-container-chat">
|
||||||
<div class="g-layout-content-center" style="width:100%;" ref="chatContentBoxs">
|
<div class="g-layout-content-center" style="width: 100%" ref="chatContentBoxs">
|
||||||
<div v-for="item,index in chatDatas" :key="item.id" style="padding-top: 15px;">
|
<div v-for="(item, index) in chatDatas" :key="item.id" style="padding-top: 15px">
|
||||||
<div class="from_user_info" v-if="item.is_self === 0">
|
<div class="from_user_info" v-if="item.is_self === 0">
|
||||||
<div class="contact-nickname">{{ item.created_at }} 林峰</div>
|
<div class="contact-nickname">{{ item.created_at }} 林峰</div>
|
||||||
<div class="receive-message-wrap">
|
<div class="receive-message-wrap">
|
||||||
@@ -21,7 +21,12 @@
|
|||||||
<div class="text-content" v-html="item.content"></div>
|
<div class="text-content" v-html="item.content"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="public-show-pic" v-else-if="item.type === 2">
|
<div class="public-show-pic" v-else-if="item.type === 2">
|
||||||
<el-image :src="item.content" :preview-src-list="[item.content]" style="max-width:200px;" :data-resid="Date.now()"/>
|
<el-image
|
||||||
|
:src="item.content"
|
||||||
|
:preview-src-list="[item.content]"
|
||||||
|
style="max-width: 200px"
|
||||||
|
:data-resid="Date.now()"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="avatar-show">
|
<div class="avatar-show">
|
||||||
@@ -36,14 +41,12 @@
|
|||||||
@blur="contentBlur"
|
@blur="contentBlur"
|
||||||
ref="contenteditableInputs"
|
ref="contenteditableInputs"
|
||||||
class="g-chat-container-footer-input"
|
class="g-chat-container-footer-input"
|
||||||
contenteditable=true></div>
|
contenteditable="true"
|
||||||
|
></div>
|
||||||
<div class="g-chat-container-footer-btn">
|
<div class="g-chat-container-footer-btn">
|
||||||
<div class="" style="margin-right:10px">
|
<div class="" style="margin-right: 10px"> Ctrl+V粘贴, Ctrl+Enter换行 </div>
|
||||||
Ctrl+V粘贴, Ctrl+Enter换行
|
|
||||||
</div>
|
|
||||||
<el-button @click="sendInfoAction">发送</el-button>
|
<el-button @click="sendInfoAction">发送</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -52,8 +55,8 @@
|
|||||||
import UToolbar from '../u-toolbar/index.vue'
|
import UToolbar from '../u-toolbar/index.vue'
|
||||||
import defalutAvator from '@/assets/image/avator.png'
|
import defalutAvator from '@/assets/image/avator.png'
|
||||||
import { chatData } from './chat.js'
|
import { chatData } from './chat.js'
|
||||||
import {ElMessage} from "element-plus";
|
import { ElMessage } from 'element-plus'
|
||||||
import dayjs from "dayjs";
|
import dayjs from 'dayjs'
|
||||||
|
|
||||||
const range = ref<HTMLElement | null>(null)
|
const range = ref<HTMLElement | null>(null)
|
||||||
const selection = ref<any>(null)
|
const selection = ref<any>(null)
|
||||||
@@ -72,12 +75,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const keepLastIndex = (obj) => {
|
const keepLastIndex = (obj) => {
|
||||||
if (window.getSelection) { // ie11 10 9 ff safari
|
if (window.getSelection) {
|
||||||
|
// ie11 10 9 ff safari
|
||||||
obj.focus() // 解决ff不获取焦点无法定位问题
|
obj.focus() // 解决ff不获取焦点无法定位问题
|
||||||
let range = window.getSelection() // 创建range
|
let range = window.getSelection() // 创建range
|
||||||
range.selectAllChildren(obj) // range 选择obj下所有子内容
|
range.selectAllChildren(obj) // range 选择obj下所有子内容
|
||||||
range.collapseToEnd() // 光标移至最后
|
range.collapseToEnd() // 光标移至最后
|
||||||
} else if (document.selection) { // ie10 9 8 7 6 5
|
} else if (document.selection) {
|
||||||
|
// ie10 9 8 7 6 5
|
||||||
let range = document.selection.createRange() // 创建选择对象
|
let range = document.selection.createRange() // 创建选择对象
|
||||||
// var range = document.body.createTextRange();
|
// var range = document.body.createTextRange();
|
||||||
range.moveToElementText(obj) // range定位到obj
|
range.moveToElementText(obj) // range定位到obj
|
||||||
@@ -140,21 +145,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const sendMessageData = (content:string,type:number=1)=>{
|
const sendMessageData = (content: string, type = 1) => {
|
||||||
const day = dayjs().format('YYYY-MM-DD');
|
const day = dayjs().format('YYYY-MM-DD')
|
||||||
return {
|
return {
|
||||||
is_self: 1,
|
is_self: 1,
|
||||||
created_at: day,
|
created_at: day,
|
||||||
content,
|
content,
|
||||||
type,
|
type,
|
||||||
id:Date.now()+Math.random()
|
id: Date.now() + Math.random(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const getPreviewList = () => {
|
const getPreviewList = () => {
|
||||||
preview_src_data.value = []
|
preview_src_data.value = []
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
chatDatas.value.forEach(item=>{
|
chatDatas.value.forEach((item) => {
|
||||||
if (item.type === 2) {
|
if (item.type === 2) {
|
||||||
preview_src_data.value.push(item.content)
|
preview_src_data.value.push(item.content)
|
||||||
}
|
}
|
||||||
@@ -189,8 +194,8 @@
|
|||||||
setCursor()
|
setCursor()
|
||||||
return ElMessage.error('请填写发送内容')
|
return ElMessage.error('请填写发送内容')
|
||||||
}
|
}
|
||||||
let reg = /<img.*?src="(.*?)".*?title="(.*?)".*?>/ig
|
let reg = /<img.*?src="(.*?)".*?title="(.*?)".*?>/gi
|
||||||
let reg1 = /<img.*?src="(.*?)".*?insert="(.*?)">/ig
|
let reg1 = /<img.*?src="(.*?)".*?insert="(.*?)">/gi
|
||||||
let content = value.replace(reg, '[$2]')
|
let content = value.replace(reg, '[$2]')
|
||||||
|
|
||||||
let data = []
|
let data = []
|
||||||
@@ -226,7 +231,6 @@
|
|||||||
focusContentEditable()
|
focusContentEditable()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@@ -242,7 +246,9 @@
|
|||||||
border-bottom: 1px solid #ededed;
|
border-bottom: 1px solid #ededed;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
[contenteditable]:focus{outline: none;}
|
[contenteditable]:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
.g-chat-container-footer-input {
|
.g-chat-container-footer-input {
|
||||||
word-break: break-all;
|
word-break: break-all;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
@@ -255,7 +261,6 @@
|
|||||||
padding-right: 5px;
|
padding-right: 5px;
|
||||||
vertical-align: text-bottom;
|
vertical-align: text-bottom;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
.g-chat-container-footer-btn {
|
.g-chat-container-footer-btn {
|
||||||
height: 50px;
|
height: 50px;
|
||||||
@@ -326,10 +331,10 @@
|
|||||||
width: 372px;
|
width: 372px;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
z-index: 9;
|
z-index: 9;
|
||||||
border: 1px solid #D9D9D9;
|
border: 1px solid #d9d9d9;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
box-shadow: 0 0 20px rgba(0,0,0,.2);
|
box-shadow: 0 0 20px rgba(0, 0, 0, 0.2);
|
||||||
.title-emoje {
|
.title-emoje {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
float: left;
|
float: left;
|
||||||
@@ -351,7 +356,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.from_user_info {
|
.from_user_info {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
// overflow: hidden;
|
// overflow: hidden;
|
||||||
@@ -434,7 +438,7 @@
|
|||||||
.receive-message-wrap {
|
.receive-message-wrap {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
align-items: center
|
align-items: center;
|
||||||
}
|
}
|
||||||
.receive-message-info {
|
.receive-message-info {
|
||||||
background: #9eea6a;
|
background: #9eea6a;
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="g-layout-content-chat-util">
|
<div class="g-layout-content-chat-util">
|
||||||
|
|
||||||
<div class="item-left">
|
<div class="item-left">
|
||||||
<div class="emoje" title="选择表情" @click.stop="selectEmojiAction">
|
<div class="emoje" title="选择表情" @click.stop="selectEmojiAction">
|
||||||
<img src="static/face/emoji-after.png" alt="" style="width:20px">
|
<img src="static/face/emoji-after.png" alt="" style="width: 20px" />
|
||||||
</div>
|
</div>
|
||||||
<div class="upload-picture" title="上传图片">
|
<div class="upload-picture" title="上传图片">
|
||||||
<el-upload action multiple :show-file-list="false" :before-upload="beforeUploadAction">
|
<el-upload action multiple :show-file-list="false" :before-upload="beforeUploadAction">
|
||||||
@@ -11,11 +10,12 @@
|
|||||||
</el-upload>
|
</el-upload>
|
||||||
</div>
|
</div>
|
||||||
<div class="emoje-border-wrap" v-show="isShowEmoji">
|
<div class="emoje-border-wrap" v-show="isShowEmoji">
|
||||||
|
<div
|
||||||
<div class="title-emoje"
|
class="title-emoje"
|
||||||
v-for="(item, index) in emojis"
|
v-for="(item, index) in emojis"
|
||||||
@click.stop="selectSigleEmojeAction($event, item)"
|
@click.stop="selectSigleEmojeAction($event, item)"
|
||||||
:key="index">
|
:key="index"
|
||||||
|
>
|
||||||
<img :src="`static/face/${item}.png`" :title="item" />
|
<img :src="`static/face/${item}.png`" :title="item" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -25,10 +25,8 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, defineEmits, onMounted } from 'vue'
|
import { ref, defineEmits, onMounted } from 'vue'
|
||||||
import {
|
import { FolderOpened } from '@element-plus/icons-vue'
|
||||||
FolderOpened
|
import { ElMessage } from 'element-plus'
|
||||||
} from '@element-plus/icons-vue'
|
|
||||||
import {ElMessage} from "element-plus";
|
|
||||||
|
|
||||||
import emoji from '@/utils/emojis'
|
import emoji from '@/utils/emojis'
|
||||||
const emojis = ref<string[]>(emoji.imgs)
|
const emojis = ref<string[]>(emoji.imgs)
|
||||||
@@ -53,7 +51,7 @@
|
|||||||
const beforeUploadAction = (file, fileList) => {
|
const beforeUploadAction = (file, fileList) => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
var reader = new FileReader()
|
var reader = new FileReader()
|
||||||
let reg = (/\.jpg$|\.jpeg$|\.gif$|\.png$/i)
|
let reg = /\.jpg$|\.jpeg$|\.gif$|\.png$/i
|
||||||
reader.readAsDataURL(file)
|
reader.readAsDataURL(file)
|
||||||
let name = file.name
|
let name = file.name
|
||||||
if (reg.test(name)) {
|
if (reg.test(name)) {
|
||||||
@@ -73,7 +71,6 @@
|
|||||||
isShowEmoji.value = false
|
isShowEmoji.value = false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@@ -134,10 +131,10 @@
|
|||||||
width: 372px;
|
width: 372px;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
z-index: 9;
|
z-index: 9;
|
||||||
border: 1px solid #D9D9D9;
|
border: 1px solid #d9d9d9;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
box-shadow: 0 0 20px rgba(0,0,0,.2);
|
box-shadow: 0 0 20px rgba(0, 0, 0, 0.2);
|
||||||
.title-emoje {
|
.title-emoje {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
float: left;
|
float: left;
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<u-container-layout>
|
<u-container-layout>
|
||||||
<div>
|
<div>
|
||||||
<div style="margin-bottom: 15px">聊天内容框,功能有发送emoji表情,上传图片,发送图片,内容滚动,发送文字</div>
|
<div style="margin-bottom: 15px"
|
||||||
|
>聊天内容框,功能有发送emoji表情,上传图片,发送图片,内容滚动,发送文字</div
|
||||||
|
>
|
||||||
<u-chat-box />
|
<u-chat-box />
|
||||||
</div>
|
</div>
|
||||||
</u-container-layout>
|
</u-container-layout>
|
||||||
@@ -11,6 +13,4 @@
|
|||||||
import UChatBox from './components/u-chartBox/index.vue'
|
import UChatBox from './components/u-chartBox/index.vue'
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style></style>
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|||||||
@@ -2,14 +2,14 @@
|
|||||||
<u-container-layout>
|
<u-container-layout>
|
||||||
<el-card style="margin-bottom: 20px">
|
<el-card style="margin-bottom: 20px">
|
||||||
<div style="margin-bottom: 10px">输入内容,并点击复制按钮</div>
|
<div style="margin-bottom: 10px">输入内容,并点击复制按钮</div>
|
||||||
<el-input v-model="inputData" placeholder="请输入" style="width:400px;max-width:100%;" />
|
<el-input v-model="inputData" placeholder="请输入" style="width: 400px; max-width: 100%" />
|
||||||
<el-button type="primary" @click="handleCopy(inputData, $event)">
|
<el-button type="primary" @click="handleCopy(inputData, $event)">
|
||||||
<el-icon style="margin-right: 6px"><document-copy /></el-icon> 复制
|
<el-icon style="margin-right: 6px"><document-copy /></el-icon> 复制
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-card>
|
<el-card>
|
||||||
<div style="margin-bottom: 10px">复制成功后可在这粘贴测试</div>
|
<div style="margin-bottom: 10px">复制成功后可在这粘贴测试</div>
|
||||||
<el-input v-model="testValue" placeholder="请输入" style="width:400px;max-width:100%;" />
|
<el-input v-model="testValue" placeholder="请输入" style="width: 400px; max-width: 100%" />
|
||||||
</el-card>
|
</el-card>
|
||||||
</u-container-layout>
|
</u-container-layout>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -4,8 +4,7 @@
|
|||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>基础用法
|
<span>基础用法 </span>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
@@ -40,8 +39,7 @@
|
|||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>禁用状态
|
<span>禁用状态 </span>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
@@ -63,8 +61,7 @@
|
|||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>文字按钮
|
<span>文字按钮 </span>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
@@ -76,8 +73,7 @@
|
|||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>图标按钮
|
<span>图标按钮 </span>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
@@ -94,8 +90,7 @@
|
|||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>按钮组
|
<span>按钮组 </span>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
@@ -112,8 +107,7 @@
|
|||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>加载中
|
<span>加载中 </span>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
@@ -146,8 +140,7 @@
|
|||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>自定义颜色
|
<span>自定义颜色 </span>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
@@ -155,25 +148,14 @@
|
|||||||
<el-button color="#626aef" plain class="item">Plain</el-button>
|
<el-button color="#626aef" plain class="item">Plain</el-button>
|
||||||
|
|
||||||
<el-button color="#626aef" disabled class="item">Disabled</el-button>
|
<el-button color="#626aef" disabled class="item">Disabled</el-button>
|
||||||
<el-button color="#626aef" disabled plain class="item"
|
<el-button color="#626aef" disabled plain class="item">Disabled Plain</el-button>
|
||||||
>Disabled Plain</el-button
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
</u-container-layout>
|
</u-container-layout>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import {
|
import { Check, Delete, Edit, Message, Search, Share, Star } from '@element-plus/icons-vue'
|
||||||
Check,
|
|
||||||
Delete,
|
|
||||||
Edit,
|
|
||||||
Message,
|
|
||||||
Search,
|
|
||||||
Share,
|
|
||||||
Star
|
|
||||||
} from '@element-plus/icons-vue'
|
|
||||||
</script>
|
</script>
|
||||||
<style>
|
<style>
|
||||||
.card-header {
|
.card-header {
|
||||||
|
|||||||
@@ -4,8 +4,7 @@
|
|||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>基础用法
|
<span>基础用法 </span>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
@@ -17,8 +16,7 @@
|
|||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>禁用状态
|
<span>禁用状态 </span>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
@@ -30,8 +28,7 @@
|
|||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>多选框组
|
<span>多选框组 </span>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
@@ -48,8 +45,7 @@
|
|||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>中间状态
|
<span>中间状态 </span>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
@@ -59,13 +55,8 @@
|
|||||||
@change="handleCheckAllChange"
|
@change="handleCheckAllChange"
|
||||||
>全选</el-checkbox
|
>全选</el-checkbox
|
||||||
>
|
>
|
||||||
<el-checkbox-group
|
<el-checkbox-group v-model="checkedCities" @change="handleCheckedCitiesChange">
|
||||||
v-model="checkedCities"
|
<el-checkbox v-for="city in cities" :key="city" :label="city">{{ city }}</el-checkbox>
|
||||||
@change="handleCheckedCitiesChange"
|
|
||||||
>
|
|
||||||
<el-checkbox v-for="city in cities" :key="city" :label="city">{{
|
|
||||||
city
|
|
||||||
}}</el-checkbox>
|
|
||||||
</el-checkbox-group>
|
</el-checkbox-group>
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
@@ -73,8 +64,7 @@
|
|||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>按钮样式
|
<span>按钮样式 </span>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
@@ -89,8 +79,7 @@
|
|||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>带有边框
|
<span>带有边框 </span>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
@@ -100,7 +89,6 @@
|
|||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
</u-container-layout>
|
</u-container-layout>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
|
|||||||
@@ -4,24 +4,18 @@
|
|||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>日期和时间点
|
<span>日期和时间点 </span>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
<el-date-picker
|
<el-date-picker v-model="value1" type="datetime" placeholder="选择日期时间点" />
|
||||||
v-model="value1"
|
|
||||||
type="datetime"
|
|
||||||
placeholder="选择日期时间点"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>日期时间格式
|
<span>日期时间格式 </span>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
@@ -37,8 +31,7 @@
|
|||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>日期和时间范围
|
<span>日期和时间范围 </span>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
@@ -53,12 +46,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
|
|
||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>默认的起始与结束时刻
|
<span>默认的起始与结束时刻 </span>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
@@ -71,13 +62,8 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</u-container-layout>
|
</u-container-layout>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
@@ -85,10 +71,7 @@
|
|||||||
const value4 = ref('')
|
const value4 = ref('')
|
||||||
const value5 = ref('')
|
const value5 = ref('')
|
||||||
const defaultTime1 = [new Date(2000, 1, 1, 12, 0, 0)]
|
const defaultTime1 = [new Date(2000, 1, 1, 12, 0, 0)]
|
||||||
const value3 = ref([
|
const value3 = ref([new Date(2000, 10, 10, 10, 10), new Date(2000, 10, 11, 10, 10)])
|
||||||
new Date(2000, 10, 10, 10, 10),
|
|
||||||
new Date(2000, 10, 11, 10, 10),
|
|
||||||
])
|
|
||||||
const shortcuts = [
|
const shortcuts = [
|
||||||
{
|
{
|
||||||
text: 'Today',
|
text: 'Today',
|
||||||
|
|||||||
@@ -5,9 +5,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import ZbPipeline from "@/components/pipeline/index.vue";
|
import ZbPipeline from '@/components/pipeline/index.vue'
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style></style>
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user