Browse Source

map buttons

master
wally 4 years ago
parent
commit
00a990899a
  1. 15
      .idea/workspace.xml
  2. 3
      app.vue
  3. BIN
      assets/images/btn-border.png
  4. 31
      components/Common/Map.vue
  5. 5
      components/DataCenter/ComplexChart.vue
  6. 7
      components/DataCenter/MapContainer.vue
  7. 22
      components/DataCenter/Middle.vue
  8. 57
      components/Page/Buttons.vue
  9. 46
      components/Page/Header.vue
  10. 2
      config/layout/dataCenterBody.js
  11. 2811
      config/map/shanxi.js
  12. 46
      config/map/values.js
  13. 5
      nuxt.config.ts
  14. 4
      package.json
  15. 46
      server/api/cityYield.ts
  16. 94
      utils/map.js
  17. 33
      yarn.lock

15
.idea/workspace.xml

@ -5,14 +5,13 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="83558921-0a42-4f39-ab1d-d218d98a0f1e" name="变更" comment=""> <list default="true" id="83558921-0a42-4f39-ab1d-d218d98a0f1e" name="变更" comment="">
<change beforePath="$PROJECT_DIR$/.gitignore" beforeDir="false" afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app.vue" beforeDir="false" afterPath="$PROJECT_DIR$/app.vue" afterDir="false" /> <change beforePath="$PROJECT_DIR$/app.vue" beforeDir="false" afterPath="$PROJECT_DIR$/app.vue" afterDir="false" />
<change beforePath="$PROJECT_DIR$/layouts/default.vue" beforeDir="false" afterPath="$PROJECT_DIR$/layouts/default.vue" afterDir="false" /> <change beforePath="$PROJECT_DIR$/components/DataCenter/Middle.vue" beforeDir="false" afterPath="$PROJECT_DIR$/components/DataCenter/Middle.vue" afterDir="false" />
<change beforePath="$PROJECT_DIR$/components/Page/Header.vue" beforeDir="false" afterPath="$PROJECT_DIR$/components/Page/Header.vue" afterDir="false" />
<change beforePath="$PROJECT_DIR$/config/layout/dataCenterBody.js" beforeDir="false" afterPath="$PROJECT_DIR$/config/layout/dataCenterBody.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/nuxt.config.ts" beforeDir="false" afterPath="$PROJECT_DIR$/nuxt.config.ts" afterDir="false" /> <change beforePath="$PROJECT_DIR$/nuxt.config.ts" beforeDir="false" afterPath="$PROJECT_DIR$/nuxt.config.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" /> <change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/server/api/hello.ts" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/utils/time.js" beforeDir="false" afterPath="$PROJECT_DIR$/utils/time.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/yarn.lock" beforeDir="false" afterPath="$PROJECT_DIR$/yarn.lock" afterDir="false" /> <change beforePath="$PROJECT_DIR$/yarn.lock" beforeDir="false" afterPath="$PROJECT_DIR$/yarn.lock" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
@ -24,8 +23,8 @@
<option name="RECENT_TEMPLATES"> <option name="RECENT_TEMPLATES">
<list> <list>
<option value="TypeScript File" /> <option value="TypeScript File" />
<option value="JavaScript File" />
<option value="Vue Single File Component" /> <option value="Vue Single File Component" />
<option value="JavaScript File" />
</list> </list>
</option> </option>
</component> </component>
@ -62,7 +61,7 @@
<property name="node.js.selected.package.tslint" value="(autodetect)" /> <property name="node.js.selected.package.tslint" value="(autodetect)" />
<property name="nodejs_package_manager_path" value="yarn" /> <property name="nodejs_package_manager_path" value="yarn" />
<property name="prettierjs.PrettierConfiguration.Package" value="D:\Demo\vue3\nuxt3-app\node_modules\prettier" /> <property name="prettierjs.PrettierConfiguration.Package" value="D:\Demo\vue3\nuxt3-app\node_modules\prettier" />
<property name="settings.editor.selected.configurable" value="settings.javascript.prettier" /> <property name="settings.editor.selected.configurable" value="reference.settingsdialog.IDE.editor.colors.配色方案字体" />
<property name="ts.external.directory.path" value="C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\WebStorm\ch-1\213.5449.31\plugins\JavaScriptLanguage\jsLanguageServicesImpl\external" /> <property name="ts.external.directory.path" value="C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\WebStorm\ch-1\213.5449.31\plugins\JavaScriptLanguage\jsLanguageServicesImpl\external" />
<property name="vue.rearranger.settings.migration" value="true" /> <property name="vue.rearranger.settings.migration" value="true" />
</component> </component>
@ -88,7 +87,9 @@
<workItem from="1637552653176" duration="4398000" /> <workItem from="1637552653176" duration="4398000" />
<workItem from="1637624185248" duration="3822000" /> <workItem from="1637624185248" duration="3822000" />
<workItem from="1637636122018" duration="8300000" /> <workItem from="1637636122018" duration="8300000" />
<workItem from="1637714189695" duration="17092000" /> <workItem from="1637714189695" duration="17290000" />
<workItem from="1637797908551" duration="3913000" />
<workItem from="1637806782564" duration="11877000" />
</task> </task>
<servers /> <servers />
</component> </component>

3
app.vue

@ -12,6 +12,9 @@ body,
} }
.clear:after { .clear:after {
content: ''; content: '';
diosplay: block;
height: 0;
visibility: hidden;
clear: both; clear: both;
} }
.float-left { .float-left {

BIN
assets/images/btn-border.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

31
components/Common/Map.vue

@ -0,0 +1,31 @@
<template>
<div id="map" class="map"></div>
</template>
<script setup>
import { initOptions } from '@/utils/map';
import { onMounted } from 'vue';
import ShanXiMap from 'config/map/shanxi';
console.log('ShanXiMap: ', ShanXiMap);
//
onMounted(() => {
// console.log(111);
const chartDom = document.getElementById('map');
console.log('chartDom: ', chartDom);
const myChart = echarts.init(chartDom);
// console.log('myChart: ', myChart);
//
echarts.registerMap('shanxi', ShanXiMap);
//
myChart.setOption(initOptions());
});
</script>
<style scoped>
.map {
width: 100%;
height: 100%;
}
</style>

5
components/DataCenter/ComplexChart.vue

@ -0,0 +1,5 @@
<template>综合曲线</template>
<script setup></script>
<style scoped></style>

7
components/DataCenter/MapContainer.vue

@ -0,0 +1,7 @@
<template>
<CommonMap></CommonMap>
</template>
<script setup></script>
<style scoped></style>

22
components/DataCenter/Middle.vue

@ -10,18 +10,11 @@
v-for="item in body.middle.data" v-for="item in body.middle.data"
:key="item.title.text" :key="item.title.text"
> >
<div <!-- 标题-->
class="title" <DataCenterTitle :item="item"></DataCenterTitle>
:style="{
height: item.title.height, <div class="p-16 flex-1 overflow-hidden">
'line-height': item.title.height, <component :is="item.component"></component>
'text-align': item.title.align,
'font-size': item.title.size,
color: item.title.color,
}"
v-if="!item.title.hide"
>
{{ item.title.text }}
</div> </div>
</div> </div>
</div> </div>
@ -33,11 +26,10 @@ import { body } from '@/config/layout/dataCenterBody';
<style scoped> <style scoped>
.item { .item {
display: flex;
flex-direction: column;
background-position: left top; background-position: left top;
background-size: 100% 100%; background-size: 100% 100%;
background-repeat: no-repeat; background-repeat: no-repeat;
} }
.title {
font-weight: bold;
}
</style> </style>

57
components/Page/Buttons.vue

@ -0,0 +1,57 @@
<template>
<div class="container clear">
<div
class="item"
v-for="(item, index) in buttons"
:key="item"
@click="$emit('click-btn', { item, index })"
>
{{ item }}
</div>
</div>
</template>
<script setup>
import { defineEmits } from 'vue';
const buttons = ['农场连线', '时物链', '数据监控', '导出统计'];
defineEmits(['click-btn']);
</script>
<style scoped>
.container {
height: 45rem;
position: absolute;
bottom: 14rem;
width: 100%;
}
.item {
width: 144rem;
height: 45rem;
display: flex;
align-items: center;
justify-content: center;
background: url('assets/images/btn-border.png') no-repeat center;
background-size: 100%;
color: #01f6ff;
font-size: 15rem;
cursor: pointer;
}
.item:nth-of-type(1) {
float: left;
margin-left: 20rem;
}
.item:nth-of-type(2) {
float: left;
margin-left: 24rem;
}
.item:nth-of-type(3) {
float: right;
margin-right: 24rem;
margin-left: 24rem;
}
.item:nth-of-type(4) {
float: right;
}
</style>

46
components/Page/Header.vue

@ -1,22 +1,24 @@
<template> <template>
<header class="page-header"> <header class="page-header">
<!-- 时间--> <!-- 时间-->
<PageTime></PageTime> <PageTime></PageTime>
</header>
<!-- 按钮组-->
<PageButtons @click-btn="onClickBtn"></PageButtons>
</template> </header>
</template>
<script>
export default { <script setup>
name: "Header" function onClickBtn({ index: btnIndex, item }) {
} console.log('btnIndex: ', btnIndex, item);
</script> }
</script>
<style scoped>
.page-header { <style scoped>
height: 115rem; .page-header {
background: url("@/assets/images/top.png") no-repeat center; position: relative;
background-size: 100% 114rem; height: 115rem;
} background: url('@/assets/images/top.png') no-repeat center;
</style> background-size: 100% 114rem;
}
</style>

2
config/layout/dataCenterBody.js

@ -47,6 +47,7 @@ export const body = {
hide: true, hide: true,
text: '3D地图', text: '3D地图',
}, },
component: 'DataCenterMapContainer',
}, },
{ {
width: '920rem', width: '920rem',
@ -61,6 +62,7 @@ export const body = {
align: 'center', align: 'center',
height: '40rem', height: '40rem',
}, },
component: 'ComplexChart',
}, },
], ],
}, },

2811
config/map/shanxi.js

File diff suppressed because it is too large

46
config/map/values.js

@ -0,0 +1,46 @@
export const values = [
{
name: '太原市',
value: 12,
},
{
name: '大同市',
value: 4,
},
{
name: '阳泉市',
value: 5,
},
{
name: '长治市',
value: 6,
},
{
name: '晋城市',
value: 2,
},
{
name: '朔州市',
value: 1,
},
{
name: '晋中市',
value: 7,
},
{
name: '运城市',
value: 3,
},
{
name: '忻州市',
value: 3,
},
{
name: '临汾市',
value: 1,
},
{
name: '吕梁市',
value: 2,
},
];

5
nuxt.config.ts

@ -10,6 +10,7 @@ export default defineNuxtConfig({
config: resolve(__dirname, './config'), config: resolve(__dirname, './config'),
components: resolve(__dirname, './components'), components: resolve(__dirname, './components'),
pages: resolve(__dirname, './pages'), pages: resolve(__dirname, './pages'),
hooks: resolve(__dirname, './hooks'),
}, },
meta: { meta: {
meta: [ meta: [
@ -25,5 +26,9 @@ export default defineNuxtConfig({
href: 'https://cdn.bootcdn.net/ajax/libs/normalize/8.0.1/normalize.min.css', href: 'https://cdn.bootcdn.net/ajax/libs/normalize/8.0.1/normalize.min.css',
}, },
], ],
script: [
{ src: 'https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js' },
{ src: 'https://cdn.jsdelivr.net/npm/echarts-gl/dist/echarts-gl.min.js' },
],
}, },
}); });

4
package.json

@ -11,6 +11,8 @@
}, },
"dependencies": { "dependencies": {
"axios": "^0.24.0", "axios": "^0.24.0",
"dayjs": "^1.10.7" "dayjs": "^1.10.7",
"echarts": "^5.2.2",
"echarts-gl": "^2.0.8"
} }
} }

46
server/api/cityYield.ts

@ -0,0 +1,46 @@
const values = [
{
name: '太原市',
value: 12,
},
{
name: '大同市',
value: 4,
},
{
name: '阳泉市',
value: 5,
},
{
name: '长治市',
value: 6,
},
{
name: '晋城市',
value: 2,
},
{
name: '朔州市',
value: 1,
},
{
name: '晋中市',
value: 7,
},
{
name: '运城市',
value: 3,
},
{
name: '忻州市',
value: 3,
},
{
name: '临汾市',
value: 1,
},
{
name: '吕梁市',
value: 2,
},
];

94
utils/map.js

@ -0,0 +1,94 @@
import ShanXiMap from 'config/map/shanxi';
import { values as ShanXiValues } from 'config/map/values';
/**
* 获取城市的value
* @param {string} cityName 城市名称
* @returns {string|*}
*/
function getValueByCity(cityName) {
try {
const city = ShanXiValues.find(item => item.name === cityName);
return city.value;
} catch (error) {
console.log('getValueByCity value: ', error);
return '';
}
}
// 初始化城市value及height等值
function initValues() {
const regions = ShanXiMap.features.map(feature => {
const value = getValueByCity(feature.properties.name);
return {
name: feature.properties.name,
value,
height: value,
label: {
show: true,
textStyle: { color: '#000' },
},
};
});
return regions;
}
export function initOptions() {
return {
zoom: 0.4,
visualMap: {
show: true,
min: 0,
max: 12,
inRange: {
color: [
'#313695',
'#4575b4',
'#74add1',
'#abd9e9',
'#e0f3f8',
'#ffffbf',
'#fee090',
'#fdae61',
'#f46d43',
'#d73027',
'#a50026',
],
},
},
series: [
{
type: 'map3D',
map: 'shanxi',
shading: 'realistic',
realisticMaterial: {
roughness: 0.6,
textureTiling: 20,
},
environment: new echarts.graphic.LinearGradient(
0,
0,
0,
1,
[
{
offset: 0,
color: '#00aa32', // 天空颜色
},
{
offset: 0.7,
color: '#998866', // 地面颜色
},
{
offset: 1,
color: '#000', // 地面颜色
},
],
false,
),
data: initValues(),
},
],
};
}

33
yarn.lock

@ -1483,6 +1483,11 @@ chrome-trace-event@^1.0.2:
resolved "https://registry.nlark.com/chrome-trace-event/download/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" resolved "https://registry.nlark.com/chrome-trace-event/download/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
integrity sha1-EBXs7UdB4V0GZkqVfbv1DQQeJqw= integrity sha1-EBXs7UdB4V0GZkqVfbv1DQQeJqw=
claygl@^1.2.1:
version "1.3.0"
resolved "https://registry.nlark.com/claygl/download/claygl-1.3.0.tgz#7a6e2903210519ac358848f5d78070ed211685f3"
integrity sha1-em4pAyEFGaw1iEj114Bw7SEWhfM=
cli-cursor@^4.0.0: cli-cursor@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.nlark.com/cli-cursor/download/cli-cursor-4.0.0.tgz?cache=0&sync_timestamp=1629747358529&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcli-cursor%2Fdownload%2Fcli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" resolved "https://registry.nlark.com/cli-cursor/download/cli-cursor-4.0.0.tgz?cache=0&sync_timestamp=1629747358529&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcli-cursor%2Fdownload%2Fcli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea"
@ -1960,6 +1965,22 @@ duplexer@^0.1.2:
resolved "https://registry.npm.taobao.org/duplexer/download/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" resolved "https://registry.npm.taobao.org/duplexer/download/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
integrity sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY= integrity sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY=
echarts-gl@^2.0.8:
version "2.0.8"
resolved "https://registry.nlark.com/echarts-gl/download/echarts-gl-2.0.8.tgz?cache=0&sync_timestamp=1628225634881&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fecharts-gl%2Fdownload%2Fecharts-gl-2.0.8.tgz#81260be0891e5e30c1710311f8b764d65329b03c"
integrity sha1-gSYL4IkeXjDBcQMR+Ldk1lMpsDw=
dependencies:
claygl "^1.2.1"
zrender "^5.1.1"
echarts@^5.2.2:
version "5.2.2"
resolved "https://registry.npmmirror.com/echarts/download/echarts-5.2.2.tgz#ec3c8b2a151cbba71ba3c2c7cf9b2f2047ce4370"
integrity sha1-7DyLKhUcu6cbo8LHz5svIEfOQ3A=
dependencies:
tslib "2.3.0"
zrender "5.2.1"
ee-first@1.1.1: ee-first@1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.nlark.com/ee-first/download/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" resolved "https://registry.nlark.com/ee-first/download/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
@ -4940,6 +4961,11 @@ tr46@~0.0.3:
resolved "https://registry.npmmirror.com/tr46/download/tr46-0.0.3.tgz?cache=0&sync_timestamp=1633302360065&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftr46%2Fdownload%2Ftr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" resolved "https://registry.npmmirror.com/tr46/download/tr46-0.0.3.tgz?cache=0&sync_timestamp=1633302360065&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftr46%2Fdownload%2Ftr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
tslib@2.3.0:
version "2.3.0"
resolved "https://registry.nlark.com/tslib/download/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e"
integrity sha1-gDuM2rPhK6WBpMpByIObuw2ssJ4=
type-fest@^0.8.0: type-fest@^0.8.0:
version "0.8.1" version "0.8.1"
resolved "https://registry.npmmirror.com/type-fest/download/type-fest-0.8.1.tgz?cache=0&sync_timestamp=1637149904800&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" resolved "https://registry.npmmirror.com/type-fest/download/type-fest-0.8.1.tgz?cache=0&sync_timestamp=1637149904800&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
@ -5380,3 +5406,10 @@ zip-stream@^4.1.0:
archiver-utils "^2.1.0" archiver-utils "^2.1.0"
compress-commons "^4.1.0" compress-commons "^4.1.0"
readable-stream "^3.6.0" readable-stream "^3.6.0"
zrender@5.2.1, zrender@^5.1.1:
version "5.2.1"
resolved "https://registry.nlark.com/zrender/download/zrender-5.2.1.tgz#5f4bbda915ba6d412b0b19dc2431beaad05417bb"
integrity sha1-X0u9qRW6bUErCxncJDG+qtBUF7s=
dependencies:
tslib "2.3.0"

Loading…
Cancel
Save