| | |
| | | "name": "fy-report", |
| | | "version": "0.0.0", |
| | | "dependencies": { |
| | | "@amap/amap-jsapi-loader": "^1.0.1", |
| | | "@element-plus/icons-vue": "^2.3.1", |
| | | "@vueuse/core": "^10.10.0", |
| | | "axios": "^1.7.2", |
| | |
| | | "vite": "^5.2.8", |
| | | "vitest": "^1.4.0" |
| | | } |
| | | }, |
| | | "node_modules/@amap/amap-jsapi-loader": { |
| | | "version": "1.0.1", |
| | | "resolved": "https://registry.npmmirror.com/@amap/amap-jsapi-loader/-/amap-jsapi-loader-1.0.1.tgz", |
| | | "integrity": "sha512-nPyLKt7Ow/ThHLkSvn2etQlUzqxmTVgK7bIgwdBRTg2HK5668oN7xVxkaiRe3YZEzGzfV2XgH5Jmu2T73ljejw==" |
| | | }, |
| | | "node_modules/@antfu/utils": { |
| | | "version": "0.7.8", |
| | |
| | | } |
| | | }, |
| | | "dependencies": { |
| | | "@amap/amap-jsapi-loader": { |
| | | "version": "1.0.1", |
| | | "resolved": "https://registry.npmmirror.com/@amap/amap-jsapi-loader/-/amap-jsapi-loader-1.0.1.tgz", |
| | | "integrity": "sha512-nPyLKt7Ow/ThHLkSvn2etQlUzqxmTVgK7bIgwdBRTg2HK5668oN7xVxkaiRe3YZEzGzfV2XgH5Jmu2T73ljejw==" |
| | | }, |
| | | "@antfu/utils": { |
| | | "version": "0.7.8", |
| | | "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.8.tgz", |
| | |
| | | "format": "prettier --write src/" |
| | | }, |
| | | "dependencies": { |
| | | "@amap/amap-jsapi-loader": "^1.0.1", |
| | | "@element-plus/icons-vue": "^2.3.1", |
| | | "@vueuse/core": "^10.10.0", |
| | | "axios": "^1.7.2", |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import { $fysp } from '../index' |
| | | |
| | | export default { |
| | | /** |
| | | * è·åé¡¶å±ä»»å¡ |
| | | */ |
| | | getTopTask() { |
| | | return $fysp.get('task/alltask/0').then((res) => res.data) |
| | | }, |
| | | |
| | | /** |
| | | * æ¥è¯¢æ»ä»»å¡ |
| | | * @param {Object} area |
| | | * @returns |
| | | */ |
| | | fetchTopTasks(area) { |
| | | return $fysp.post('task/find', area).then((res) => res.data) |
| | | }, |
| | | |
| | | /** |
| | | * è·ååä»»å¡ç»è®¡ä¿¡æ¯ |
| | | */ |
| | | fetchSubtaskSummary({ topTaskId = undefined, sceneTypeId = undefined }) { |
| | | return $fysp |
| | | .get('subtask/summary', { |
| | | params: { |
| | | topTaskId: topTaskId, |
| | | sceneTypeId: sceneTypeId |
| | | } |
| | | }) |
| | | .then((res) => res.data) |
| | | }, |
| | | |
| | | /** |
| | | * è·ååä»»å¡ç»è®¡ä¿¡æ¯ |
| | | */ |
| | | fetchSubtaskSummaryArea(area) { |
| | | return $fysp.post('subtask/summary/area', area).then((res) => res.data) |
| | | }, |
| | | |
| | | /** |
| | | * è·ååä»»å¡é®é¢è¯¦æ
|
| | | */ |
| | | getProBySubtask(id) { |
| | | return $fysp |
| | | .get('problemlist/subtask', { |
| | | params: { |
| | | stGuid: id |
| | | } |
| | | }) |
| | | .then((res) => res.data) |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import axios from 'axios' |
| | | import { ElMessage } from 'element-plus' |
| | | |
| | | const debug = true |
| | | |
| | | let ip1 = 'http://47.100.191.150:9005/' |
| | | let ip1_file = 'http://47.100.191.150:9005/' |
| | | // let ip1 = 'https://fyami.com.cn:447/'; |
| | | // let ip1_file = 'https://fyami.com.cn:447/'; |
| | | let ip2 = 'https://fyami.com.cn/' |
| | | let ip2_file = 'https://fyami.com.cn/' |
| | | |
| | | if (debug) { |
| | | ip1 = 'http://192.168.0.138:8082/' |
| | | // ip1_file = 'http://47.100.191.150:9005/'; |
| | | // ip2 = 'http://192.168.0.138:8080/'; |
| | | // ip2_file = 'https://fyami.com.cn/'; |
| | | } |
| | | |
| | | //é£ç¾½ç管 |
| | | const $fysp = axios.create({ |
| | | baseURL: ip1, |
| | | timeout: 20000 |
| | | }) |
| | | $fysp.imgUrl = `${ip1_file}images/` |
| | | $fysp.downloadUrl = `${ip1_file}files/` |
| | | |
| | | //é£ç¾½ç¯å¢ |
| | | const $fytz = axios.create({ |
| | | baseURL: ip2, |
| | | timeout: 20000 |
| | | }) |
| | | $fytz.imgUrl = `${ip2_file}images/` |
| | | |
| | | //æ·»å æ¦æªå¨ |
| | | ;[$fysp, $fytz].forEach((i) => { |
| | | // æ·»å è¯·æ±æ¦æªå¨ |
| | | i.interceptors.request.use( |
| | | function (config) { |
| | | // å¨åé请æ±ä¹ååäºä»ä¹ |
| | | console.log('==>请æ±å¼å§') |
| | | console.log(`${config.baseURL}${config.url}`) |
| | | if (config.data) { |
| | | console.log('==>è¯·æ±æ°æ®', config.data) |
| | | } |
| | | return config |
| | | }, |
| | | function (error) { |
| | | // 对请æ±é误åäºä»ä¹ |
| | | console.log('==>请æ±å¼å§') |
| | | console.log(error) |
| | | ElMessage({ |
| | | message: error, |
| | | type: 'error' |
| | | }) |
| | | return Promise.reject(error) |
| | | } |
| | | ) |
| | | |
| | | // æ·»å ååºæ¦æªå¨ |
| | | i.interceptors.response.use( |
| | | function (response) { |
| | | // 2xx èå´å
çç¶æç é½ä¼è§¦åè¯¥å½æ°ã |
| | | // 对ååºæ°æ®åç¹ä»ä¹ |
| | | console.log(response) |
| | | console.log('==>请æ±ç»æ') |
| | | if (response.status == 200) { |
| | | if (response.data.success != undefined && response.data.success != null) { |
| | | if (response.data.success == true) { |
| | | return response |
| | | } else { |
| | | ElMessage({ |
| | | message: response.data.message, |
| | | type: 'error' |
| | | }) |
| | | return Promise.reject(response.data.message) |
| | | } |
| | | } else { |
| | | return response |
| | | } |
| | | } else { |
| | | return Promise.reject(response) |
| | | } |
| | | }, |
| | | function (error) { |
| | | // è¶
åº 2xx èå´çç¶æç é½ä¼è§¦åè¯¥å½æ°ã |
| | | // 对ååºé误åç¹ä»ä¹ |
| | | console.log(error) |
| | | console.log('==>请æ±ç»æ') |
| | | ElMessage({ |
| | | message: error, |
| | | type: 'error' |
| | | }) |
| | | return Promise.reject(error) |
| | | } |
| | | ) |
| | | }) |
| | | |
| | | export { $fysp, $fytz } |
| | |
| | | flex-direction: column; |
| | | align-items: center; |
| | | } |
| | | |
| | | /************************************** é¼ æ äºä»¶ **************************************/ |
| | | .p-events-auto { |
| | | pointer-events: auto; |
| | | } |
| | | |
| | | .p-events-none { |
| | | pointer-events: none; |
| | | } |
| | |
| | | /* prettier-ignore */ |
| | | declare module 'vue' { |
| | | export interface GlobalComponents { |
| | | BaseMap: typeof import('./components/map/BaseMap.vue')['default'] |
| | | copy: typeof import('./components/search/OptionLocation copy.vue')['default'] |
| | | CoreHeader: typeof import('./components/core/CoreHeader.vue')['default'] |
| | | ElButton: typeof import('element-plus/es')['ElButton'] |
| | | ElCard: typeof import('element-plus/es')['ElCard'] |
| | | ElCascader: typeof import('element-plus/es')['ElCascader'] |
| | | ElCol: typeof import('element-plus/es')['ElCol'] |
| | | ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider'] |
| | | ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] |
| | | ElFormItem: typeof import('element-plus/es')['ElFormItem'] |
| | | ElOption: typeof import('element-plus/es')['ElOption'] |
| | | ElProgress: typeof import('element-plus/es')['ElProgress'] |
| | | ElRow: typeof import('element-plus/es')['ElRow'] |
| | | ElScorllbar: typeof import('element-plus/es')['ElScorllbar'] |
| | | ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] |
| | | ElSelect: typeof import('element-plus/es')['ElSelect'] |
| | | ElStatistic: typeof import('element-plus/es')['ElStatistic'] |
| | | ElTag: typeof import('element-plus/es')['ElTag'] |
| | | ElText: typeof import('element-plus/es')['ElText'] |
| | | ElTimeline: typeof import('element-plus/es')['ElTimeline'] |
| | | ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem'] |
| | | FYOptionTime: typeof import('./components/search/FYOptionTime.vue')['default'] |
| | | OptionLocation: typeof import('./components/search/OptionLocation.vue')['default'] |
| | | OptionSceneType: typeof import('./components/search/OptionSceneType.vue')['default'] |
| | | OptionTime: typeof import('./components/search/OptionTime.vue')['default'] |
| | | RouterLink: typeof import('vue-router')['RouterLink'] |
| | | RouterView: typeof import('vue-router')['RouterView'] |
| | | SubtaskExamineItem: typeof import('./components/inspection/SubtaskExamineItem.vue')['default'] |
| | | SubtaskItem: typeof import('./components/inspection/SubtaskItem.vue')['default'] |
| | | TaskItem: typeof import('./components/inspection/TaskItem.vue')['default'] |
| | | TaskNode: typeof import('./components/inspection/TaskNode.vue')['default'] |
| | | TaskSummaryItem: typeof import('./components/inspection/TaskSummaryItem.vue')['default'] |
| | | } |
| | | } |
| | |
| | | <template> |
| | | <div> |
| | | <el-row justify="center">{{ title }}</el-row> |
| | | <el-row justify="start"> |
| | | <div>{{ title }}</div> |
| | | <el-text type="danger" size="small">{{ warning }}</el-text> |
| | | </el-row> |
| | | <div class="border-r-small f-b"> |
| | | <div v-for="(item, i) in items" :key="title + i"> |
| | | <slot :item="item" :index="i"></slot> |
| | |
| | | export default { |
| | | props: { |
| | | title: String, |
| | | warning: String, |
| | | count: Number, |
| | | items: Array |
| | | }, |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="border-r-small p-h-8"> |
| | | <el-row justify="space-between"> |
| | | <div>{{ title }}</div> |
| | | <el-text size="small">{{ sceneType }}</el-text> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="8"> |
| | | <el-statistic title="å·¡æ¥" :value="10"> |
| | | <template #suffix>个</template> |
| | | </el-statistic> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-statistic title="é®é¢" :value="16"> |
| | | <template #suffix>个</template> |
| | | </el-statistic> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-statistic title="æ´æ¹" :value="8"> |
| | | <template #suffix>个</template> |
| | | </el-statistic> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | props: { |
| | | title: String, |
| | | sceneType: { |
| | | type: String, |
| | | default: 'å
¨åºæ¯' |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped></style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div id="container" :style="height"></div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { onMounted } from 'vue' |
| | | import { createMap } from '@/utils/map/index' |
| | | // import { createMap } from '@/utils/map/baseMap' |
| | | import { inject } from 'vue' |
| | | |
| | | const mapHeight = inject('mapHeight') |
| | | |
| | | const height = 'height:' + mapHeight |
| | | |
| | | onMounted(() => { |
| | | // é«å¾·å°å¾åå§å |
| | | createMap('container') |
| | | }) |
| | | </script> |
| | | <style> |
| | | #container { |
| | | position: relative; |
| | | width: 100%; |
| | | /* height: calc(var(--fy-body-height) / 2); */ |
| | | /* min-height: var(--screen-min-height); |
| | | min-width: var(--screen-min-width); */ |
| | | z-index: 0px; |
| | | } |
| | | |
| | | /* å»é¤é«å¾·å°å¾çåºå®çå·å¾æ */ |
| | | .amap-logo { |
| | | display: none; |
| | | opacity: 0 !important; |
| | | } |
| | | .amap-copyright { |
| | | display: none; |
| | | opacity: 0 !important; |
| | | } |
| | | |
| | | .amap-marker-label { |
| | | font-size: 13px; |
| | | text-align: center; |
| | | color: white; |
| | | background-color: transparent; |
| | | text-shadow: black 2px 2px 2px; |
| | | border-radius: 2px; |
| | | border: 0px; |
| | | padding: 4px; |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <!-- <el-form-item :label="placeholder" :prop="prop"> --> |
| | | <el-cascader |
| | | :model-value="formatedValue" |
| | | @change="handleChange" |
| | | :options="locations" |
| | | :placeholder="placeholder" |
| | | :props="optionProps" |
| | | size="small" |
| | | :style="'width: ' + width + 'px'" |
| | | /> |
| | | <!-- </el-form-item> --> |
| | | </template> |
| | | |
| | | <script> |
| | | import { enumLocation } from '@/enum/location' |
| | | |
| | | export default { |
| | | props: { |
| | | // æ¯å¦å¨é¦é项夿·»å âå
¨é¨âé项 |
| | | allOption: { |
| | | type: Boolean, |
| | | default: true |
| | | }, |
| | | // æ¥è¯¢çè¡æ¿çº§å«ï¼åå¼1ï¼2ï¼3ï¼4, 5, 6 |
| | | level: { |
| | | type: Number, |
| | | default: 4 |
| | | }, |
| | | // ç»æè¿å |
| | | modelValue: Object, |
| | | // æ¯å¦é»è®¤è¿ååå§é项 |
| | | initValue: { |
| | | type: Boolean, |
| | | default: true |
| | | }, |
| | | // è½å¦éæ©ä»»æä¸çº§é项 |
| | | checkStrictly: { |
| | | type: Boolean, |
| | | default: true |
| | | }, |
| | | prop: { |
| | | type: String, |
| | | default: '_locations' |
| | | }, |
| | | width: { |
| | | type: Number, |
| | | default: 220 |
| | | } |
| | | }, |
| | | emits: ['update:modelValue'], |
| | | data() { |
| | | return { |
| | | locations: enumLocation(this.allOption, this.level), |
| | | optionProps: { |
| | | checkStrictly: this.checkStrictly |
| | | } |
| | | } |
| | | }, |
| | | computed: { |
| | | placeholder() { |
| | | const list = 'ç/å¸/åº/é/é/ç©'.split('/') |
| | | const p = [] |
| | | for (let i = 0; i < this.level; i++) { |
| | | p.push(list[i]) |
| | | } |
| | | return p.join('/') |
| | | }, |
| | | formatedValue() { |
| | | return this.optionFormatReverse(this.modelValue) |
| | | } |
| | | }, |
| | | methods: { |
| | | handleChange(value) { |
| | | this.$emit('update:modelValue', this.optionFormat(value)) |
| | | }, |
| | | /** |
| | | * å°åºéé¡¹ç»ææ ¼å¼å |
| | | */ |
| | | optionFormat(val) { |
| | | const res = { |
| | | pCode: null, |
| | | pName: null, |
| | | cCode: null, |
| | | cName: null, |
| | | dCode: null, |
| | | dName: null, |
| | | tCode: null, |
| | | tName: null, |
| | | aCode: null, |
| | | aName: null, |
| | | mCode: null, |
| | | mName: null |
| | | } |
| | | if (val.length > 0) { |
| | | res.pCode = val[0][0] |
| | | res.pName = val[0][1] |
| | | } |
| | | if (val.length > 1) { |
| | | res.cCode = val[1][0] |
| | | res.cName = val[1][1] |
| | | } |
| | | if (val.length > 2) { |
| | | res.dCode = val[2][0] |
| | | res.dName = val[2][1] |
| | | } |
| | | if (val.length > 3) { |
| | | res.tCode = val[3][0] |
| | | res.tName = val[3][1] |
| | | } |
| | | if (val.length > 4) { |
| | | res.aCode = val[4][0] |
| | | res.aName = val[4][1] |
| | | } |
| | | if (val.length > 5) { |
| | | res.mCode = val[5][0] |
| | | res.mName = val[5][1] |
| | | } |
| | | return res |
| | | }, |
| | | optionFormatReverse(val) { |
| | | const res = [] |
| | | if (val) { |
| | | if (val.pName) { |
| | | res.push([val.pCode, val.pName]) |
| | | } |
| | | if (val.cName) { |
| | | res.push([val.cCode, val.cName]) |
| | | } |
| | | if (val.dName) { |
| | | res.push([val.dCode, val.dName]) |
| | | } |
| | | if (val.tName) { |
| | | res.push([val.tCode, val.tName]) |
| | | } |
| | | if (val.aName) { |
| | | res.push([val.aCode, val.aName]) |
| | | } |
| | | if (val.mName) { |
| | | res.push([val.mCode, val.mName]) |
| | | } |
| | | } |
| | | return res |
| | | } |
| | | }, |
| | | mounted() { |
| | | if (this.initValue) { |
| | | if (this.checkStrictly) { |
| | | this.handleChange([this.locations[0].value]) |
| | | } else { |
| | | const f = (location) => { |
| | | if (location.children && location.children.length > 0) { |
| | | const r = f(location.children[0]) |
| | | r.unshift(location.value) |
| | | return r |
| | | } else { |
| | | return [location.value] |
| | | } |
| | | } |
| | | this.handleChange(f(this.locations[0])) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <!-- <el-form-item label="åºæ¯ç±»å" :prop="prop"> --> |
| | | <el-select |
| | | :model-value="modelValue" |
| | | @change="handleChange" |
| | | placeholder="åºæ¯ç±»å" |
| | | size="small" |
| | | :style="'width: ' + width + 'px'" |
| | | > |
| | | <el-option v-for="s in sceneTypes" :key="s.value" :label="s.label" :value="s" /> |
| | | </el-select> |
| | | <!-- </el-form-item> --> |
| | | </template> |
| | | |
| | | <script> |
| | | import { enumScene } from '@/enum/scene' |
| | | |
| | | export default { |
| | | props: { |
| | | // æ¯å¦å¨é¦é项夿·»å âå
¨é¨âé项 |
| | | allOption: { |
| | | type: Boolean, |
| | | default: true |
| | | }, |
| | | // 1:é£ç¾½ç¯å¢ç³»ç»ï¼2ï¼é£ç¾½ç管系ç»ï¼ |
| | | type: { |
| | | type: Number, |
| | | default: 1 |
| | | }, |
| | | // è¿åç»æ |
| | | modelValue: Object, |
| | | // æ¯å¦é»è®¤è¿ååå§é项 |
| | | initValue: { |
| | | type: Boolean, |
| | | default: true |
| | | }, |
| | | // form表åç»å®å±æ§å |
| | | prop: { |
| | | type: String, |
| | | default: '_scenetype' |
| | | }, |
| | | // 忢 type åï¼å½åé项æ¯å¦æ¸
空 |
| | | sourceInit: { |
| | | type: Boolean, |
| | | default: true |
| | | }, |
| | | width: { |
| | | type: Number, |
| | | default: 220 |
| | | } |
| | | }, |
| | | emits: ['update:modelValue'], |
| | | data() { |
| | | return { |
| | | // sceneTypes: enumScene(this.type, this.allOption), |
| | | } |
| | | }, |
| | | computed: { |
| | | sceneTypes() { |
| | | if (this.sourceInit) { |
| | | // å½å 为typeæè
allOptionåæ°ååå¼èµ·é项忴æ¶ï¼æ¸
空å½åé项 |
| | | this.handleChange() |
| | | } |
| | | return enumScene(this.type, this.allOption) |
| | | } |
| | | }, |
| | | methods: { |
| | | handleChange(value) { |
| | | this.$emit('update:modelValue', value) |
| | | } |
| | | }, |
| | | mounted() { |
| | | if (this.initValue) { |
| | | this.handleChange(this.sceneTypes[0]) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <!-- <el-form-item label="æ¶é´" :prop="prop"> --> |
| | | <el-date-picker |
| | | v-model="date" |
| | | @change="handleChange" |
| | | :type="type" |
| | | placeholder="éæ©æ¶é´" |
| | | size="small" |
| | | style="width: 100px" |
| | | /> |
| | | <!-- </el-form-item> --> |
| | | </template> |
| | | |
| | | <script> |
| | | const MONTH = 'month' |
| | | |
| | | export default { |
| | | props: { |
| | | type: { |
| | | type: String, |
| | | default: MONTH |
| | | }, |
| | | // è¿åç»æ |
| | | modelValue: Date, |
| | | // æ¯å¦é»è®¤è¿ååå§é项 |
| | | initValue: { |
| | | type: Boolean, |
| | | default: true |
| | | }, |
| | | prop: String |
| | | }, |
| | | emits: ['update:modelValue'], |
| | | data() { |
| | | return { |
| | | date: this.modelValue |
| | | } |
| | | }, |
| | | computed: {}, |
| | | methods: { |
| | | handleChange(value) { |
| | | this.$emit('update:modelValue', value) |
| | | }, |
| | | timeFormat() { |
| | | switch (this.type) { |
| | | case MONTH: |
| | | return 'YYYY-MM' |
| | | default: |
| | | return 'YYYY-MM' |
| | | } |
| | | } |
| | | }, |
| | | mounted() { |
| | | if (this.initValue) { |
| | | this.date = new Date() |
| | | this.handleChange(this.date) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | /** |
| | | * è·åè¡æ¿åºå |
| | | * @param {Boolean} allOption æ¯å¦å¨å¤´é¨æ·»å âå
¨é¨âé项 |
| | | * @param {Number} level è·åçå类深度ï¼èå´ 1 - 4 |
| | | * @returns |
| | | */ |
| | | function enumLocation(allOption = true, level = 4) { |
| | | const l = _enumLocation() |
| | | if (!allOption) { |
| | | l.shift() |
| | | } |
| | | _deleteByLevel(l, level, 1) |
| | | |
| | | return l |
| | | } |
| | | |
| | | function _enumLocation() { |
| | | return [ |
| | | { |
| | | label: 'å
¨å¸', |
| | | value: [null, 'å
¨å¸'] |
| | | }, |
| | | { |
| | | label: '䏿µ·å¸', |
| | | value: ['31', '䏿µ·å¸'], |
| | | children: [ |
| | | { |
| | | label: '䏿µ·å¸', |
| | | value: ['3100', '䏿µ·å¸'], |
| | | children: [ |
| | | { |
| | | label: 'éå±±åº', |
| | | value: ['310116', 'éå±±åº'], |
| | | children: [ |
| | | { label: 'å¼ å °é', value: ['310116103', 'å¼ å °é'] }, |
| | | { label: 'äºæé', value: ['310116104', 'äºæé'] }, |
| | | { label: 'åå··é', value: ['310116105', 'åå··é'] }, |
| | | { label: 'å»ä¸é', value: ['310116107', 'å»ä¸é'] }, |
| | | { label: '髿°åº', value: ['310116503', '髿°åº'] }, |
| | | { label: 'éå±±å«é', value: ['310116109', 'éå±±å«é'] }, |
| | | { label: 'æ¼æ³¾é', value: ['310116112', 'æ¼æ³¾é'] }, |
| | | { |
| | | label: 'å±±é³é', |
| | | value: ['310116113', 'å±±é³é'], |
| | | children: [ |
| | | { |
| | | label: 'ä¸è¾¾å¹¿åº', |
| | | value: ['31011611301', 'ä¸è¾¾å¹¿åº'] |
| | | } |
| | | ] |
| | | }, |
| | | { label: 'ç³åè¡é', value: ['310116001', 'ç³åè¡é'] }, |
| | | { label: 'æ±æ³¾é', value: ['310116101', 'æ±æ³¾é'] }, |
| | | { label: 'æ«æ³¾é', value: ['310116102', 'æ«æ³¾é'] }, |
| | | { label: '碳谷绿湾', value: ['9000', '碳谷绿湾'] } |
| | | ] |
| | | }, |
| | | { |
| | | label: '徿±åº', |
| | | value: ['310104', '徿±åº'], |
| | | children: [ |
| | | { |
| | | label: 'æ¼æ²³æ³¾æ°å
´ææ¯å¼ååº', |
| | | value: ['310104501', 'æ¼æ²³æ³¾æ°å
´ææ¯å¼ååº'] |
| | | }, |
| | | { label: 'æ¹åè·¯è¡é', value: ['310104004', 'æ¹åè·¯è¡é'] }, |
| | | { label: '天平路è¡é', value: ['310104003', '天平路è¡é'] }, |
| | | { label: 'è¹æ¢
è·¯è¡é', value: ['310104012', 'è¹æ¢
è·¯è¡é'] }, |
| | | { label: 'æ«æè·¯è¡é', value: ['310104008', 'æ«æè·¯è¡é'] }, |
| | | { label: 'æåè·¯è¡é', value: ['310104007', 'æåè·¯è¡é'] }, |
| | | { label: 'é¿æ¡¥è¡é', value: ['310104010', 'é¿æ¡¥è¡é'] }, |
| | | { |
| | | label: 'ç°æè¡é', |
| | | value: ['310104011', 'ç°æè¡é'], |
| | | children: [ |
| | | { |
| | | label: 'ç°å°å', |
| | | value: ['31010401101', 'ç°å°å'] |
| | | } |
| | | ] |
| | | }, |
| | | { label: 'åº·å¥æ°æè¡é', value: ['310104013', 'åº·å¥æ°æè¡é'] }, |
| | | { |
| | | label: 'å¾å®¶æ±è¡é', |
| | | value: ['310104014', 'å¾å®¶æ±è¡é'], |
| | | children: [ |
| | | { |
| | | label: '天饿¡¥', |
| | | value: ['31010401401', '天饿¡¥'] |
| | | } |
| | | ] |
| | | }, |
| | | { label: 'åäºè·¯è¡é', value: ['310104015', 'åäºè·¯è¡é'] }, |
| | | { label: 'é¾åè¡é', value: ['310104016', 'é¾åè¡é'] }, |
| | | { label: 'æ¼æ²³æ³¾è¡é', value: ['310104017', 'æ¼æ²³æ³¾è¡é'] }, |
| | | { label: 'åæ³¾é', value: ['310104103', 'åæ³¾é'] } |
| | | ] |
| | | }, |
| | | { |
| | | label: 'éå®åº', |
| | | value: ['310106', 'éå®åº'], |
| | | children: [ |
| | | { |
| | | label: '大å®è·¯è¡é', |
| | | value: ['310106019', '大å®è·¯è¡é'], |
| | | children: [ |
| | | { |
| | | label: 'ä¹
å
ä¸å¿', |
| | | value: ['31010601901', 'ä¹
å
ä¸å¿'] |
| | | } |
| | | ] |
| | | }, |
| | | { label: '彿µ¦æ°æè¡é', value: ['310106020', '彿µ¦æ°æè¡é'] }, |
| | | { label: '临汾路è¡é', value: ['310106021', '临汾路è¡é'] }, |
| | | { label: 'è·æ±è¥¿è·¯è¡é', value: ['310106022', 'è·æ±è¥¿è·¯è¡é'] }, |
| | | { |
| | | label: '彿µ¦é', |
| | | value: ['310106101', '彿µ¦é'], |
| | | children: [ |
| | | { |
| | | label: '大èå', |
| | | value: ['31010610101', '大èå'] |
| | | } |
| | | ] |
| | | }, |
| | | { label: 'æ±å®è·¯è¡é', value: ['310106006', 'æ±å®è·¯è¡é'] }, |
| | | { label: 'ç³é¨äºè·¯è¡é', value: ['310106011', 'ç³é¨äºè·¯è¡é'] }, |
| | | { |
| | | label: 'å京西路è¡é', |
| | | value: ['310106012', 'å京西路è¡é'], |
| | | children: [ |
| | | { |
| | | label: 'X88', |
| | | value: ['31010601201', 'X88'] |
| | | } |
| | | ] |
| | | }, |
| | | { label: 'éå®å¯ºè¡é', value: ['310106013', 'éå®å¯ºè¡é'] }, |
| | | { |
| | | label: 'æ¹å®¶æ¸¡è¡é', |
| | | value: ['310106014', 'æ¹å®¶æ¸¡è¡é'], |
| | | children: [ |
| | | { |
| | | label: '889', |
| | | value: ['31010601401', '889'] |
| | | } |
| | | ] |
| | | }, |
| | | { label: '天ç®è¥¿è·¯è¡é', value: ['310106015', '天ç®è¥¿è·¯è¡é'] }, |
| | | { |
| | | label: 'åç«è¡é', |
| | | value: ['310106016', 'åç«è¡é'], |
| | | children: [ |
| | | { |
| | | label: '大æ¦å', |
| | | value: ['31010601601', '大æ¦å'] |
| | | } |
| | | ] |
| | | }, |
| | | { label: 'å®å±±è·¯è¡é', value: ['310106017', 'å®å±±è·¯è¡é'] }, |
| | | { label: 'å
±åæ°è·¯è¡é', value: ['310106018', 'å
±åæ°è·¯è¡é'] } |
| | | ] |
| | | }, |
| | | { |
| | | label: 'æ®éåº', |
| | | value: ['310107', 'æ®éåº'], |
| | | children: [ |
| | | { label: 'æ¹æ¨æ°æè¡é', value: ['310107005', 'æ¹æ¨æ°æè¡é'] }, |
| | | { label: 'ä¸éè¡é', value: ['310107021', 'ä¸éè¡é'] }, |
| | | { label: 'çå¦éè¡é', value: ['310107022', 'çå¦éè¡é'] }, |
| | | { label: 'é¿å¾é', value: ['310107102', 'é¿å¾é'] }, |
| | | { label: 'æ¡æµ¦é', value: ['310107103', 'æ¡æµ¦é'] }, |
| | | { label: 'ç³æ³è·¯è¡é', value: ['310107017', 'ç³æ³è·¯è¡é'] }, |
| | | { label: 'çæ³è·¯è¡é', value: ['310107016', 'çæ³è·¯è¡é'] }, |
| | | { label: 'é¿å¯¿è·¯è¡é', value: ['310107015', 'é¿å¯¿è·¯è¡é'] }, |
| | | { label: 'é¿é£æ°æè¡é', value: ['310107014', 'é¿é£æ°æè¡é'] }, |
| | | { label: 'å®å·è·¯è¡é', value: ['310107020', 'å®å·è·¯è¡é'] } |
| | | ] |
| | | }, |
| | | { |
| | | label: 'éµè¡åº', |
| | | value: ['310112', 'éµè¡åº'], |
| | | children: [ |
| | | { label: 'æ±å·è·¯è¡é', value: ['310112001', 'æ±å·è·¯è¡é'] }, |
| | | { label: 'å¤ç¾è¡é', value: ['310112006', 'å¤ç¾è¡é'] }, |
| | | { label: 'æ°è¹è¡é', value: ['310112008', 'æ°è¹è¡é'] }, |
| | | { label: '浦é¦è¡é', value: ['310112009', '浦é¦è¡é'] }, |
| | | { label: 'èåºé', value: ['310112101', 'èåºé'] }, |
| | | { label: 'ä¸å®é', value: ['310112102', 'ä¸å®é'] }, |
| | | { label: '颿¡¥é', value: ['310112103', '颿¡¥é'] }, |
| | | { label: 'åæ¼é', value: ['310112106', 'åæ¼é'] }, |
| | | { label: 'è¹æ¡¥é', value: ['310112107', 'è¹æ¡¥é'] }, |
| | | { label: 'æ¢
éé', value: ['310112108', 'æ¢
éé'] }, |
| | | { label: 'å´æ³¾é', value: ['310112110', 'å´æ³¾é'] }, |
| | | { label: '马桥é', value: ['310112112', '马桥é'] }, |
| | | { label: '浦æ±é', value: ['310112114', '浦æ±é'] }, |
| | | { label: 'èåºå·¥ä¸åº', value: ['310112501', 'èåºå·¥ä¸åº'] } |
| | | ] |
| | | }, |
| | | { |
| | | label: 'é¿å®åº', |
| | | value: ['310105', 'é¿å®åº'], |
| | | children: [ |
| | | { label: 'åé³è·¯è¡é', value: ['310105001', 'åé³è·¯è¡é'] }, |
| | | { label: 'æ±èè·¯è¡é', value: ['310105002', 'æ±èè·¯è¡é'] }, |
| | | { label: 'æ°åè·¯è¡é', value: ['310105004', 'æ°åè·¯è¡é'] }, |
| | | { label: 'å¨å®¶æ¡¥è¡é', value: ['310105005', 'å¨å®¶æ¡¥è¡é'] }, |
| | | { label: '天山路è¡é', value: ['310105006', '天山路è¡é'] }, |
| | | { label: 'ä»éæ°æè¡é', value: ['310105008', 'ä»éæ°æè¡é'] }, |
| | | { label: 'è¹æ¡¥è¡é', value: ['310105009', 'è¹æ¡¥è¡é'] }, |
| | | { label: 'ç¨å®¶æ¡¥è¡é', value: ['310105010', 'ç¨å®¶æ¡¥è¡é'] }, |
| | | { label: 'åæ°æ³¾è¡é', value: ['310105011', 'åæ°æ³¾è¡é'] }, |
| | | { label: 'æ°æ³¾é', value: ['310105102', 'æ°æ³¾é'] } |
| | | ] |
| | | }, |
| | | { |
| | | label: 'å®å±±åº', |
| | | value: ['310113', 'å®å±±åº'], |
| | | children: [] |
| | | }, |
| | | { |
| | | label: 'åå®åº', |
| | | value: ['310114', 'åå®åº'], |
| | | children: [] |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
| | | |
| | | // æç
§éæ±çå®ä½ç²¾åº¦è¿åå¯¹åºæ°æ® |
| | | function _deleteByLevel(locations, level, step) { |
| | | if (step == level) { |
| | | locations.forEach((l) => { |
| | | if (l.children) { |
| | | l.children = undefined |
| | | } |
| | | }) |
| | | return |
| | | } else { |
| | | step++ |
| | | locations.forEach((l) => { |
| | | if (l.children) { |
| | | _deleteByLevel(l.children, level, step) |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | |
| | | export { enumLocation } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | /** |
| | | * åºæ¯ç±»åæä¸¾ |
| | | * @param {Number} type 1:é£ç¾½ç¯å¢ç³»ç»ï¼2ï¼é£ç¾½ç管系ç»ï¼ |
| | | * @param {Boolean} allOption æ¯å¦å¨å¤´é¨æ·»å âå
¨é¨âé项 |
| | | */ |
| | | function enumScene(type, allOption = true) { |
| | | let l |
| | | switch (type) { |
| | | case 1: |
| | | l = _enumScene_1() |
| | | break |
| | | case 2: |
| | | l = _enumScene_2() |
| | | break |
| | | default: |
| | | l = _enumScene_1() |
| | | break |
| | | } |
| | | if (!allOption) { |
| | | l.shift() |
| | | } |
| | | |
| | | return l |
| | | } |
| | | |
| | | function getSceneName(value, type = 1) { |
| | | return enumScene(type).find((v) => { |
| | | if (v.value == value) { |
| | | return v |
| | | } |
| | | }) |
| | | } |
| | | |
| | | // é£ç¾½ç¯å¢ç³»ç» |
| | | function _enumScene_1() { |
| | | return [ |
| | | { |
| | | label: 'å
¨é¨åºæ¯', |
| | | value: null |
| | | }, |
| | | { |
| | | label: 'é¤é¥®', |
| | | value: '1' |
| | | }, |
| | | { |
| | | label: 'å·¥å°', |
| | | value: '2' |
| | | }, |
| | | { |
| | | label: 'ç 头', |
| | | value: '3' |
| | | }, |
| | | { |
| | | label: 'å åº', |
| | | value: '4' |
| | | }, |
| | | { |
| | | label: 'æ
æç«', |
| | | value: '5' |
| | | }, |
| | | { |
| | | label: 'å·¥ä¸ä¼ä¸', |
| | | value: '6' |
| | | }, |
| | | { |
| | | label: '汽修', |
| | | value: '7' |
| | | }, |
| | | { |
| | | label: 'å®éªå®¤', |
| | | value: '8' |
| | | }, |
| | | { |
| | | label: 'å»çæºæ', |
| | | value: '9' |
| | | } |
| | | ] |
| | | } |
| | | |
| | | // é£ç¾½çç®¡ç³»ç» |
| | | function _enumScene_2() { |
| | | return [ |
| | | { |
| | | label: 'å
¨é¨åºæ¯', |
| | | value: null |
| | | }, |
| | | { |
| | | label: 'å·¥å°', |
| | | value: '1' |
| | | }, |
| | | { |
| | | label: 'ç 头', |
| | | value: '2' |
| | | }, |
| | | { |
| | | label: 'æ
æç«', |
| | | value: '3' |
| | | }, |
| | | { |
| | | label: 'å·¥ä¸ä¼ä¸', |
| | | value: '4' |
| | | }, |
| | | { |
| | | label: 'é¤é¥®', |
| | | value: '5' |
| | | }, |
| | | { |
| | | label: '汽修', |
| | | value: '6' |
| | | }, |
| | | { |
| | | label: 'éè·¯æ¬å°çæµç¹', |
| | | value: '9' |
| | | }, |
| | | { |
| | | label: 'éè·¯', |
| | | value: '10' |
| | | }, |
| | | { |
| | | label: 'å åº', |
| | | value: '14' |
| | | } |
| | | ] |
| | | } |
| | | |
| | | export { enumScene, getSceneName } |
| | |
| | | |
| | | import App from './App.vue' |
| | | import router from './router' |
| | | import timeUtil from './utils/time-util' |
| | | |
| | | const app = createApp(App) |
| | | |
| | | app.config.globalProperties.$fm = timeUtil |
| | | |
| | | // elementUI Icon 注å |
| | | for (const [key, component] of Object.entries(ElementPlusIconsVue)) { |
| | | app.component(key, component) |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import AMapLoader from '@amap/amap-jsapi-loader' |
| | | |
| | | var mapInitDone = false |
| | | var onMapMountedEvents = [] |
| | | |
| | | var AMap |
| | | // å°å¾å¯¹è±¡ |
| | | var map |
| | | // 嫿å¾å± |
| | | var satellite |
| | | // é¼ æ ç»å¾ |
| | | var mouseTool |
| | | // 3Då¾å± |
| | | var object3Dlayer |
| | | // å°å¾æå¨ç¶æ |
| | | var isDragging = false |
| | | |
| | | // å°å¾å è½½å®æè§¦å |
| | | function onMapMounted(...events) { |
| | | if (mapInitDone) { |
| | | events.forEach((e) => { |
| | | e() |
| | | }) |
| | | } else { |
| | | onMapMountedEvents = onMapMountedEvents.concat(events) |
| | | } |
| | | } |
| | | |
| | | function createMap(id) { |
| | | AMapLoader.load({ |
| | | key: 'c55f27799afbfa69dc5a3fad90cafe51', // ç³è¯·å¥½çWeb端å¼åè
Keyï¼é¦æ¬¡è°ç¨ load æ¶å¿
å¡« |
| | | version: '2.0', // æå®è¦å è½½ç JS API ççæ¬ï¼ç¼ºçæ¶é»è®¤ä¸º 1.4.15 |
| | | plugins: [ |
| | | 'Map3D', |
| | | 'ElasticMarker', |
| | | 'AMap.ControlBar', |
| | | 'AMap.ToolBar', |
| | | 'AMap.Scale', |
| | | 'AMap.DragRoute', |
| | | 'AMap.MouseTool', |
| | | 'AMap.PolygonEditor' |
| | | ] // éè¦ä½¿ç¨ççæä»¶å表ï¼å¦æ¯ä¾å°º'AMap.Scale'ç |
| | | }) |
| | | .then((_AMap) => { |
| | | AMap = _AMap |
| | | _initMap(id) |
| | | mapInitDone = true |
| | | onMapMountedEvents.forEach((e) => { |
| | | e() |
| | | }) |
| | | onMapMountedEvents = [] |
| | | }) |
| | | .catch((e) => { |
| | | console.log(e) |
| | | }) |
| | | } |
| | | |
| | | function _initMap(elementId) { |
| | | map = new AMap.Map(elementId, { |
| | | rotateEnable: true, |
| | | pitchEnable: true, |
| | | alwaysRender: false, |
| | | showLabel: true, |
| | | showBuildingBlock: true, |
| | | mapStyle: 'amap://styles/e1e78509de64ddcd2efb4cb34c6fae2a', |
| | | features: ['bg', 'road'], |
| | | pitch: 45, // å°å¾ä¿¯ä»°è§åº¦ï¼ææèå´ 0 度- 83 度 |
| | | viewMode: '3D', // å°å¾æ¨¡å¼ |
| | | resizeEnable: true, |
| | | center: [121.603928, 31.252955], |
| | | zooms: [3, 18], |
| | | zoom: 14 |
| | | }) |
| | | |
| | | // æ·»å 嫿å°å¾ |
| | | satellite = new AMap.TileLayer.Satellite() |
| | | satellite.hide() |
| | | map.add([satellite]) |
| | | |
| | | _initMouseTool() |
| | | // _init3DLayer(); |
| | | _initDragEvent() |
| | | } |
| | | |
| | | // é¼ æ ç»å¾åå§å |
| | | function _initMouseTool() { |
| | | mouseTool = new AMap.MouseTool(map) |
| | | } |
| | | |
| | | // 3Då¾å±åå§å |
| | | // function _init3DLayer() { |
| | | // object3Dlayer = new AMap.Object3DLayer(); |
| | | // map.add(object3Dlayer); |
| | | // } |
| | | |
| | | // 设置å°å¾ææ½çå¬äºä»¶ |
| | | function _initDragEvent() { |
| | | let dragEndEvent |
| | | map.on('dragstart', () => { |
| | | clearTimeout(dragEndEvent) |
| | | isDragging = true |
| | | }) |
| | | map.on('dragend', function () { |
| | | dragEndEvent = setTimeout(() => { |
| | | isDragging = false |
| | | }, 8000) |
| | | }) |
| | | } |
| | | |
| | | export { createMap, onMapMounted, map, AMap, mouseTool, object3Dlayer, isDragging } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | /** |
| | | * é«å¾·å°å¾ç¹æ è®°ç»å¶ç¸å
³ |
| | | */ |
| | | |
| | | import { map, AMap } from './index' |
| | | |
| | | var _massMarks = undefined |
| | | |
| | | export default { |
| | | /** |
| | | * ç»å¶æµ·éç¹æ è®° |
| | | * @param fDatas 宿´çæµæ°æ® |
| | | * @param _factor å½åå±ç¤ºççæµå å对象 |
| | | */ |
| | | drawMassMarks(fDatas, _factor, onClick) { |
| | | if (_massMarks) { |
| | | map.remove(_massMarks) |
| | | _massMarks = undefined |
| | | } |
| | | const lnglats = fDatas.lnglats_GD |
| | | var data = [] |
| | | for (let i = 0; i < lnglats.length; i++) { |
| | | data.push({ |
| | | lnglat: lnglats[i], //ç¹æ è®°ä½ç½® |
| | | name: `${fDatas.times[i]}<br/>${_factor.factorName}: ${_factor.datas[i].factorData} mg/m³`, |
| | | id: i |
| | | }) |
| | | } |
| | | |
| | | // åå»ºæ ·å¼å¯¹è±¡ |
| | | var styleObject = { |
| | | url: 'https://a.amap.com/jsapi_demos/static/images/mass1.png', |
| | | // url: './asset/mipmap/ic_up_white.png', // 徿 å°å |
| | | |
| | | size: new AMap.Size(11, 11), // 徿 å¤§å° |
| | | |
| | | anchor: new AMap.Pixel(5, 5) // 徿 æ¾ç¤ºä½ç½®åç§»éï¼åºåç¹ä¸ºå¾æ å·¦ä¸è§ |
| | | } |
| | | |
| | | var massMarks = new AMap.MassMarks(data, { |
| | | zIndex: 5, // æµ·éç¹å¾å±å å çé¡ºåº |
| | | zooms: [15, 18], // 卿å®å°å¾ç¼©æ¾çº§å«èå´å
å±ç¤ºæµ·éç¹å¾å± |
| | | style: styleObject // è®¾ç½®æ ·å¼å¯¹è±¡ |
| | | }) |
| | | massMarks.on('click', (event) => { |
| | | const i = event.data.id |
| | | // 3. èªå®ä¹ç¹å»äºä»¶ |
| | | onClick(i) |
| | | }) |
| | | |
| | | var marker = new AMap.Marker({ |
| | | content: ' ', |
| | | map: map, |
| | | |
| | | offset: new AMap.Pixel(13, 12) |
| | | }) |
| | | var timeout |
| | | massMarks.on('mouseover', (e) => { |
| | | if (timeout) { |
| | | clearTimeout(timeout) |
| | | } |
| | | marker.setPosition(e.data.lnglat) |
| | | marker.setLabel({ content: e.data.name }) |
| | | map.add(marker) |
| | | timeout = setTimeout(() => { |
| | | map.remove(marker) |
| | | }, 2000) |
| | | }) |
| | | _massMarks = massMarks |
| | | map.add(massMarks) |
| | | }, |
| | | |
| | | createLabelMarks(img, dataList) { |
| | | const layer = new AMap.LabelsLayer({ |
| | | zooms: [3, 20], |
| | | zIndex: 1000, |
| | | // å¼å¯æ 注é¿è®©ï¼é»è®¤ä¸ºå¼å¯ï¼v1.4.15 æ°å¢å±æ§ |
| | | collision: true, |
| | | // å¼å¯æ 注淡å
¥å¨ç»ï¼é»è®¤ä¸ºå¼å¯ï¼v1.4.15 æ°å¢å±æ§ |
| | | animation: true |
| | | }) |
| | | |
| | | map.add(layer) |
| | | |
| | | // var markers = []; |
| | | for (var i = 0; i < dataList.length; i++) { |
| | | const data = dataList[i] |
| | | var curData = { |
| | | name: data.sceneName, |
| | | position: [data.longitude, data.latitude], |
| | | zooms: [10, 20], |
| | | opacity: 1, |
| | | zIndex: 10, |
| | | icon: { |
| | | type: 'image', |
| | | image: img, |
| | | // clipOrigin: [14, 92], |
| | | // clipSize: [50, 68], |
| | | size: [30, 30], |
| | | anchor: 'bottom-center', |
| | | angel: 0, |
| | | retina: true |
| | | }, |
| | | text: { |
| | | content: data.sceneName, |
| | | direction: 'top', |
| | | offset: [0, -5], |
| | | style: { |
| | | fontSize: 16, |
| | | fontWeight: 'normal', |
| | | fillColor: '#fff', |
| | | strokeColor: '#333', |
| | | strokeWidth: 0, |
| | | backgroundColor: '#122b54a9' |
| | | } |
| | | } |
| | | } |
| | | curData.extData = { |
| | | index: i |
| | | } |
| | | |
| | | var labelMarker = new AMap.LabelMarker(curData) |
| | | |
| | | // markers.push(labelMarker); |
| | | |
| | | layer.add(labelMarker) |
| | | } |
| | | |
| | | return layer |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import dayjs from "dayjs"; |
| | | |
| | | export default { |
| | | format(date, template) { |
| | | return dayjs(date).format(template) |
| | | }, |
| | | |
| | | formatH(date){ |
| | | if (date) { |
| | | return this.format(date, 'HH:mm:ss') |
| | | } else { |
| | | return '--:--:--' |
| | | } |
| | | }, |
| | | |
| | | formatYM(date){ |
| | | if (date) { |
| | | return this.format(date, 'YYYY-MM') |
| | | } else { |
| | | return '----/--' |
| | | } |
| | | }, |
| | | |
| | | formatYMD(date){ |
| | | if (date) { |
| | | return this.format(date, 'YYYY-MM-DD') |
| | | } else { |
| | | return '----/--/--' |
| | | } |
| | | }, |
| | | |
| | | formatYMDH(date){ |
| | | if (date) { |
| | | return this.format(date, 'YYYY-MM-DD HH:mm:ss') |
| | | } else { |
| | | return '----/--/-- --:--:--' |
| | | } |
| | | }, |
| | | } |
| | |
| | | </template> |
| | | |
| | | <script setup> |
| | | /** |
| | | * ç°åºå·¡æ¥å®æ¶è·è¸ª |
| | | */ |
| | | import TaskTrack from '@/views/inspection/TaskTrack.vue' |
| | | </script> |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="border-r-small" style="height: 200px"> |
| | | <div class="f-l">èåæ§æ³</div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | tasks: [] |
| | | } |
| | | }, |
| | | watch: {}, |
| | | methods: {}, |
| | | mounted() {} |
| | | } |
| | | </script> |
| | | |
| | | <style scoped></style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="border-r-small" style="height: 200px"> |
| | | <div class="f-l">åºæ¥èªå·¡æ¥</div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | tasks: [] |
| | | } |
| | | }, |
| | | watch: {}, |
| | | methods: {}, |
| | | mounted() {} |
| | | } |
| | | </script> |
| | | |
| | | <style scoped></style> |
| | |
| | | <!-- <div class="f-l">ç°åºå·¡æ¥è·è¸ªï¼ç°åºäººåå·¡æ¥æ
åµå®æ¶ææ¡ï¼</div> --> |
| | | <!-- <SubtaskItem v-for="item in subtaskList" :key="item.guid" v-bind="item"> </SubtaskItem> --> |
| | | <el-col :span="4"> |
| | | <TaskNode title="æ°ä»»å¡" :items="subtaskList" v-slot="{ item, index }"> |
| | | <TaskNode |
| | | title="æ°ä»»å¡" |
| | | :items="subtaskList" |
| | | warning="è¦åï¼æå岿ªå®æä»»å¡" |
| | | v-slot="{ item, index }" |
| | | > |
| | | <SubtaskItem v-bind="item" :index="index"> </SubtaskItem> |
| | | </TaskNode> |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <TaskNode title="æ£å¨æ§è¡" :items="subtaskList" v-slot="{ item, index }"> |
| | | <TaskNode |
| | | title="æ£å¨æ§è¡" |
| | | :items="subtaskList" |
| | | warning="è¦åï¼ææ§è¡æ¶é´è¿é¿çä»»å¡" |
| | | v-slot="{ item, index }" |
| | | > |
| | | <SubtaskItem v-bind="item" :index="index"> </SubtaskItem> |
| | | </TaskNode> |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <TaskNode title="å¾
å®¡æ ¸" :items="subtaskList" v-slot="{ item, index }"> |
| | | <TaskNode |
| | | title="å¾
å®¡æ ¸" |
| | | :items="subtaskList" |
| | | warning="è¦åï¼æé¿æ¶é´æªå®¡æ ¸é®é¢" |
| | | v-slot="{ item, index }" |
| | | > |
| | | <SubtaskExamineItem v-bind="item" :index="index" type="é®é¢å®¡æ ¸"> </SubtaskExamineItem> |
| | | </TaskNode> |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <TaskNode title="å¾
æ´æ¹" :items="subtaskList" v-slot="{ item, index }"> |
| | | <TaskNode |
| | | title="å¾
æ´æ¹" |
| | | :items="subtaskList" |
| | | warning="è¦åï¼æé¿æ¶é´æªæ´æ¹é®é¢" |
| | | v-slot="{ item, index }" |
| | | > |
| | | <SubtaskExamineItem v-bind="item" :index="index" type="å¾
æ´æ¹"> </SubtaskExamineItem> |
| | | </TaskNode> |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <TaskNode title="å¾
确认" :items="subtaskList" v-slot="{ item, index }"> |
| | | <TaskNode |
| | | title="å¾
确认" |
| | | :items="subtaskList" |
| | | warning="è¦åï¼æé¿æ¶é´æªå®¡æ ¸æ´æ¹" |
| | | v-slot="{ item, index }" |
| | | > |
| | | <SubtaskExamineItem v-bind="item" :index="index" type="æ´æ¹å®¡æ ¸"> </SubtaskExamineItem> |
| | | </TaskNode> |
| | | </el-col> |
| | |
| | | import InspectionView from '@/views/inspection/InspectionView.vue' |
| | | import ManagementView from '@/views/management/ManagementView.vue' |
| | | import VisualizationView from '@/views/visualization/VisualizationView.vue' |
| | | |
| | | import { provide } from 'vue' |
| | | |
| | | provide('mapHeight', 'calc(var(--fy-body-height) / 3 * 2)') |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .page-left-top { |
| | | height: calc(var(--fy-body-height) / 2); |
| | | background-color: aquamarine; |
| | | height: calc(var(--fy-body-height) / 3 * 2); |
| | | /* background-color: aquamarine; */ |
| | | } |
| | | .page-left-bottom { |
| | | height: calc(var(--fy-body-height) / 2); |
| | | background-color: bisque; |
| | | height: calc(var(--fy-body-height) / 3 * 1); |
| | | /* background-color: bisque; */ |
| | | } |
| | | |
| | | .page-right { |
| | |
| | | <template> |
| | | <el-row> ç»è®¡ç®¡ç </el-row> |
| | | <TaskStats></TaskStats> |
| | | <TaskSummary></TaskSummary> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import TaskStats from '@/views/management/TaskStats.vue' |
| | | import TaskSummary from '@/views/management/TaskSummary.vue' |
| | | </script> |
| | | |
| | | <style scoped></style> |
| | |
| | | <el-row> |
| | | <TaskItem v-for="item in tasks" :key="item.guid" v-bind="item"></TaskItem> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <SelfInspection></SelfInspection> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <JointEnforcement></JointEnforcement> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import SelfInspection from '@/views/inspection/SelfInspection.vue' |
| | | import JointEnforcement from '@/views/inspection/JointEnforcement.vue' |
| | | |
| | | /** |
| | | * ä»»å¡å®ææ
åµ |
| | | */ |
| | | export default { |
| | | components: { SelfInspection, JointEnforcement }, |
| | | data() { |
| | | return { |
| | | tasks: [] |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <el-row> å·¡æ¥æ±æ» </el-row> |
| | | <el-row> |
| | | <el-col :span="8"> |
| | | <TaskSummaryItem title="仿¥æ±æ»"></TaskSummaryItem> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <TaskSummaryItem title="å¨åº¦æ±æ»"></TaskSummaryItem> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <TaskSummaryItem title="æåº¦æ±æ»"></TaskSummaryItem> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <TaskSummaryItem title="å£åº¦æ±æ»"></TaskSummaryItem> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <TaskSummaryItem title="å¹´åº¦æ±æ»"></TaskSummaryItem> |
| | | </el-col> |
| | | </el-row> |
| | | </template> |
| | | |
| | | <script setup></script> |
| | | |
| | | <style scoped></style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <el-scrollbar :height="mapHeight"> |
| | | <el-card class="p-events-auto wrapper"> |
| | | <div>{{ subtask.name }}</div> |
| | | <el-timeline style="max-width: 600px"> |
| | | <el-timeline-item |
| | | v-for="(activity, index) in activities" |
| | | :key="index" |
| | | :timestamp="activity.timestamp" |
| | | :hide-timestamp="activity.running" |
| | | :type="activity.running ? 'danger' : 'success'" |
| | | :size="activity.running ? 'large' : 'normal'" |
| | | :hollow="false" |
| | | > |
| | | {{ activity.content }} |
| | | </el-timeline-item> |
| | | </el-timeline> |
| | | </el-card> |
| | | </el-scrollbar> |
| | | </template> |
| | | |
| | | <script> |
| | | import { inject } from 'vue' |
| | | /** |
| | | * å
·ä½å·¡æ¥ä»»å¡å¯è§å |
| | | * å
æ¬å°å¾å®ä½ä¿¡æ¯å±ç¤ºãå·¡æ¥ä»»å¡å
¨æµç¨å¹³éºå±ç¤º |
| | | */ |
| | | export default { |
| | | setup() { |
| | | const mapHeight = inject('mapHeight') |
| | | |
| | | const height = 'height:' + mapHeight |
| | | return { height, mapHeight } |
| | | }, |
| | | props: { |
| | | subtask: { |
| | | type: Object, |
| | | default: () => { |
| | | return { |
| | | guid: 'SMuheEkjswioSn7A', |
| | | name: 'ä¸ç§çææ°åæ¸¯é¡¹ç®å·¡æ¥ä¸ç§çææ°åæ¸¯é¡¹ç®å·¡æ¥', |
| | | district: 'éå±±åº', |
| | | planTime: '2024-06-04', |
| | | startTime: '2024-06-04 13:31:26', |
| | | endTime: '2024-06-04 13:33:37', |
| | | userName: 'æ±æ£å¼º', |
| | | status: 'å·²ç»æ', |
| | | total: 4, |
| | | checked: 2 |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | activities: [ |
| | | { |
| | | content: 'ä»»å¡å建', |
| | | timestamp: '2024-06-04 08:00', |
| | | running: false |
| | | }, |
| | | { |
| | | content: 'å¼å§å·¡æ¥', |
| | | timestamp: '2024-06-04 09:00', |
| | | running: false |
| | | }, |
| | | { |
| | | content: 'ç»æå·¡æ¥', |
| | | timestamp: '2024-06-04 09:15', |
| | | running: false |
| | | }, |
| | | { |
| | | content: '宿é®é¢å®¡æ ¸', |
| | | timestamp: '2024-06-04 10:15', |
| | | running: false |
| | | }, |
| | | { |
| | | content: 'é®é¢æ´æ¹ä¸...', |
| | | timestamp: '2024-06-04 10:15', |
| | | running: true |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .wrapper { |
| | | /* position: absolute; */ |
| | | top: 0; |
| | | right: 0; |
| | | /* background-color: wheat; */ |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <el-row> |
| | | <div class="p-events-auto"> |
| | | <OptionLocation :level="3" :width="170" v-model="locations"></OptionLocation> |
| | | <OptionSceneType :type="2" :width="120" v-model="sceneType"></OptionSceneType> |
| | | <OptionTime v-model="time"></OptionTime> |
| | | </div> |
| | | </el-row> |
| | | </template> |
| | | |
| | | <script> |
| | | import { inject } from 'vue' |
| | | import taskApi from '@/api/fysp/taskApi.js' |
| | | import marks from '@/utils/map/marks.js' |
| | | import scene_1 from '@/assets/icon/scene_1.png' |
| | | /** |
| | | * ç管å¯è§å |
| | | * å±ç°åºåæ´ä½çç®¡ç¶æ |
| | | */ |
| | | export default { |
| | | setup() { |
| | | const mapHeight = inject('mapHeight') |
| | | |
| | | const height = 'height:' + mapHeight |
| | | return { height, mapHeight } |
| | | }, |
| | | props: {}, |
| | | data() { |
| | | return { |
| | | locations: {}, |
| | | sceneType: {}, |
| | | time: '' |
| | | } |
| | | }, |
| | | computed: { |
| | | area() { |
| | | return { |
| | | provincecode: this.locations.pCode, |
| | | provincename: this.locations.pName, |
| | | citycode: this.locations.cCode, |
| | | cityname: this.locations.cName, |
| | | districtcode: this.locations.dCode, |
| | | districtname: this.locations.dName, |
| | | starttime: this.$fm.formatYMDH(this.time), |
| | | scensetypeid: this.sceneType.value |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | // æ¥è¯¢ |
| | | fetchSubtaskSummaryArea() { |
| | | return taskApi.fetchSubtaskSummaryArea(this.area).then((res) => { |
| | | let list = [] |
| | | res.data.forEach((e) => { |
| | | list = list.concat(e.subTaskSummary) |
| | | }) |
| | | this.newLabelMasks(list) |
| | | }) |
| | | }, |
| | | newLabelMasks(data) { |
| | | marks.createLabelMarks(scene_1, data) |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.fetchSubtaskSummaryArea() |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped></style> |
| | |
| | | <template> |
| | | <el-row class="wrapper"> å¯è§å </el-row> |
| | | <!-- <el-row class="wrapper"> å¯è§å </el-row> --> |
| | | <BaseMap></BaseMap> |
| | | <el-row class="overlay-container" :style="height"> |
| | | <el-col :span="18"> |
| | | <SupervisionVisual></SupervisionVisual> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <SubtaskVisual></SubtaskVisual> |
| | | </el-col> |
| | | </el-row> |
| | | </template> |
| | | |
| | | <script setup></script> |
| | | <script setup> |
| | | import SubtaskVisual from './SubtaskVisual.vue' |
| | | import SupervisionVisual from './SupervisionVisual.vue' |
| | | import { inject } from 'vue' |
| | | |
| | | const mapHeight = inject('mapHeight') |
| | | |
| | | const height = 'height:' + mapHeight |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .wrapper { |
| | | /* background-color: aquamarine; */ |
| | | .overlay-container { |
| | | /* background: aliceblue; */ |
| | | position: absolute; |
| | | width: 100%; |
| | | /* height: 100vh; */ |
| | | top: 0; |
| | | left: 0; |
| | | /* padding: 4px; */ |
| | | pointer-events: none; |
| | | } |
| | | </style> |